#java #java.util.scanner
#java #java.util.scanner
Вопрос:
import java.util.Scanner; // using the Scanner class located in the "java.util" directory
public class Helloworld {
public static void main(String [] args){
int number =0, count = 0, sum = 0;
int Largest= 0, largestEvenNumber = 0;
do {
Scanner console = new Scanner(System.in);
number = console.nextInt();
if (number > Largest) { // Condition for computing the largest number
Largest = number;
}
if (number < 0) { // Condition for computing the number of negative integers in the sequence
count = count 1;
}
if (number % 2 == 0) { // Condition for computing the largest even integer in the sequence
if (largestEvenNumber < number) {
largestEvenNumber = number;
}
}
if (number % 3 == 0) { // Condition for computing the sum of numbers divisible by 3
sum = number;
}
}while(number != 0);
System.out.println("nThe largest integer is " Largest);
System.out.println("The number of negative integers in the sequence is " count);
System.out.println("The largest even integer in the sequence is " largestEvenNumber);
System.out.printf("The sum of numbers divisible by 3 is %d", sum);
}
}
output:
1
2
3
-1,
-2,
-45,
7,
-9,
23,
67,
900,
0
Нет вывода
Expected output:
1
2
3
-1,
-2,
-45,
7,
-9,
23,
67,
900,
0
The largest integer is 900;
The number of negative integers in the sequence is 4;
The largest even integer in the sequence is 900;
The sum of numbers divisible by 3 is 849
Программа выполняется, когда я вводю входные данные один за другим. Однако, когда я пытаюсь «Скопировать вставить» все входные данные сразу из текстового редактора (входные данные разделены в каждой строке в текстовом редакторе), выходных данных нет. Я думаю, что класс сканера считывает только первое число. Как мне исправить это, не создавая несколько объектов и не вводя каждое число?
Комментарии:
1. Почему вы создаете новые сканеры внутри цикла? Почему бы не создать один перед
do-while
циклом?2. » Я думаю, что класс сканера считывает только первое число » Сканер пытается прочитать как можно больше данных и кэшировать оставшуюся часть. Вот почему, когда вы помещаете все данные в одну строку и нажимаете ENTER, они будут прочитаны полностью одним,
Scanner
и ничего не останетсяSystem.in
для другого сканера, который будет создан на следующей итерации. Вот почему мы должны использовать один сканер для каждого ресурса (если у вас много методов, требующих обработки сканером System.in затем либо передайте этот сканер в качестве параметра метода, либо создайте в некотором классе поле сканера и получите к нему доступ через getter).
Ответ №1:
Вам не хватает того, как работает класс Scanner:
try (Scanner scanner = new Scanner(System.in)) {
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
System.out.println("n=" n);
}
}
Вы всегда читали первое число: вы должны сначала проверить, будет ли у вас число, затем прочитать как число, затем повторить попытку до конца файла.
Обратите внимание, что сканер закрывается с помощью try-with-resources, который может оказаться ненужным в случае System.in
, но не в другом случае (файлы, …).
Комментарии:
1. Как мне остановить процесс?