#java
#java
Вопрос:
Я не могу запустить следующий фрагмент кода. Я хотел бы знать, почему я продолжаю получать ошибку .NoSuchElementException. Я видел в другом сообщении, это связано с тем, что я использую один и тот же входной поток для обоих входов, но создание нового сканера или использование метода .close, похоже, не решает мою проблему.
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
int tooBig = 0; // parts too big
int tooSmall = 0; // parts too small
int perfectParts= 0; // perfect parts
int a = scanner.nextInt();
scanner.close();
for (int i = 0; i <= a ; i ) {
int j = scanner.nextInt();
if(j == 1) {
tooBig ;
} else if (j == -1) {
tooSmall ;
} else if (j == 0) {
perfectParts ;
}
scanner.close();
}
System.out.println(perfectParts " " tooBig
" " tooSmall);
}
}
Редактировать после удаления метода scanner.close(). Я все еще получаю ту же ошибку:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
int tooBig = 0; // parts too big
int tooSmall = 0; // parts too small
int perfectParts= 0; // perfect parts
int a = scanner.nextInt();
for (int i = 0; i <= a ; i ) {
int j = scanner.nextInt();
if(j == 1) {
tooBig ;
} else if (j == -1) {
tooSmall ;
} else if (j == 0) {
perfectParts ;
}
}
System.out.println(perfectParts " " tooBig
" " tooSmall);
}
}
Комментарии:
1. вы закрываете сканер в цикле for . это означает, что вы закрываете его несколько раз, а затем, пока он закрыт, вы запрашиваете другой ввод
2. попробуйте поместить
scanner.close();
после цикла for вместо inside3. …и вы закрываете его один раз еще до того, как войдете в цикл. Удалите все
scanner.close()
вызовы и посмотрите, что вы получите.4.
scanner
невозможно выполнитьnextInt()
, если вы вызываетеclose()
первым.5. Я пробовал оба ваших предложения, и, похоже, ни одно из них не сработало. Я продолжаю получать ошибку.
Ответ №1:
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int tooBig = 0; // parts too big
int tooSmall = 0; // parts too small
int perfectParts= 0; // perfect parts
int a = scanner.nextInt();
for (int i = 0; i <= a ; i ) {
int j = scanner.nextInt();
if(j == 1) {
tooBig ;
} else if (j == -1) {
tooSmall ;
} else if (j == 0) {
perfectParts ;
}
}
System.out.println(perfectParts " " tooBig
" " tooSmall);
scanner.close();
}
}
Комментарии:
1. сканер должен быть открыт перед вызовом одного из его методов, поэтому, если вы просто закроете его в конце своего кода, он должен прекратить выдавать ошибки
2. Привет! Я все еще получаю ошибку.
3. Ошибка: исключение в потоке «main» java.util.Исключение NoSuchElementException в java.base/java.util. Scanner.throwFor(Scanner.java:937) в java.base/java.util. Scanner.next(Scanner.java:1594) в java.base/java.util. Scanner.nextInt(Scanner.java:2258) в java.base/java.util. Scanner.nextInt(Scanner.java:2212) в Main.main(Main.java:16)
4. вы удалили все остальные
scanner.close();
вызовы? в самом конце должен быть только один5. ДА. Я пробовал оба варианта, не используя scanner.close(); или используя только один. Я все еще получаю ту же ошибку.
Ответ №2:
scanner.close();
Должно вызываться только в самом конце. Это также даже не обязательно в вашем конкретном случае и, вероятно, причина, по которой вы получаете это исключение.