2015-07-04 5 views
0

Я застрял в этом вопросе 6) Предположим, вы ввели 34.3, клавишу ENTER, 57.8, клавишу ENTER, 789, клавишу ENTER. Проанализируйте следующий код.Использование сканера в линиях извлечения

Scanner scanner = new Scanner(System.in); 
int value = scanner.nextDouble(); 
int doubleValue = scanner.nextInt(); 
String line = scanner.nextLine(); 

Я знаю ответ, линия будет равна '\ n', когда выполняется последнее утверждение, но почему?

Может ли кто-нибудь объяснить это мне, пожалуйста?

+0

этот код действительно скомпилирован? – Reimeus

+0

Я согласен с @Reimeus, у вас есть двойной, который вы установили равным int, но не выбрали для ввода int? – smoggers

ответ

1

Сканер считывает столько жетонов, сколько необходимо, чтобы получить следующий результат, а затем оставит все остальные токены там, где нужно их изучить. nextInt() не нуждается в символе новой строки, поэтому он оставляет его в потоке токенов. Когда вы вызываете nextLine(), он смотрит в поток токенов, видит символ новой строки и возвращает это.

1

Давайте сломаем это заявление по заявлению.

Scanner scanner = new Scanner(System.in); 
int value = scanner.nextDouble(); 

Система ждет вас, чтобы ввести значение.

34.3↲ 

Значение считывается как 34,3, но усечено до 34, поскольку оно сохраняется как целое число. Теперь выполняется следующий оператор.

int doubleValue = scanner.nextInt(); 

Система ждет вас снова, чтобы ввести значение.

57.8↲ 

Значение читается как 57, как вы используете scanner.nextInt() и, следовательно, +0,8 игнорируется. Однако в буфере есть запись.

String line = scanner.nextLine(); 

Теперь система снова ждет ввода, и вы вводите это. Первая новая строка - это остаток от предыдущего ввода.

↲ 
789↲ 

Сканер сначала видит символ новой строки, поэтому предполагает, что линия завершена. Таким образом, значение считывается как \ n

Надеюсь, это поможет.

Смежные вопросы