Класс сканера: два входа на одной линии, разделенные пробелами - PullRequest
0 голосов
/ 05 июля 2019

В следующем фрагменте кода:

import java.util.Scanner;

class A
{
    public static void main()
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the first number: ");
        int a = sc.nextInt();
        System.out.println("Enter the second number: ");
        int b = sc.nextInt();

        System.out.println(a);
        System.out.println(b);
    }
}

Если я ввожу два числа в одну строку (разделенные пробелами) после того, как отображается первое сообщение, оба принимаются как ввод одновременно, а затем отображается второе сообщение. Почему это так?

1 Ответ

1 голос
/ 05 июля 2019

nextInt() дает следующий вход независимо от того, находятся ли входы в одной строке или нет.

Чтобы получить только первое значение каждой строки, вы можете использовать sc.nextLine() между вызовами к sc.nextInt(), чтобы использовать терминатор строки и перейти к следующей строке:

System.out.println("Enter the first number: ");
int a=sc.nextInt();

sc.nextLine(); //Place this to ensure other inputs on same line don't matter

System.out.println("Enter the second number: ");
int b=sc.nextInt();

//Without the nextLine it will set c to the next int even on same line as b

System.out.println("Enter the third number: ");
int c=sc.nextInt();

System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);

Тестовый прогон:

Enter the first number: 
1 2 3 4 5
Enter the second number: 
78 89 99
Enter the third number: 

Выход:

a = 1
b = 78
c = 89

Как вы можете видеть, сканер установит только a в 1 и игнорируйте 2 3 4 5, затем дождитесь следующего ввода для b в следующей строке и установите b на 78.

Однако для c будет установлено значение 89, поскольку scanner не было приказано перейти к следующей строке, а затем будет запущен оператор print без опции ввода чего-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...