У меня есть код, который я пытался запустить. Это дает мне исключение NoSuchElementException.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Student {
public static void main(String[] args) {
System.out.println("Insert Names:");
List<String> names = getNames();
System.out.println("Insert Marks:");
List<Integer> marks = getMarks();
for (int i = 0; i < names.size(); i++) {
String name = names.get(i);
int mark = marks.get(i);
System.out.println( name + " - " + mark);
}
}
private static List<String> getNames() {
List<String> names= new ArrayList<>();
Scanner scanner = new Scanner( System.in );
for ( int i = 0 ; i < 3; i++){
names.add(scanner.nextLine());
}
scanner.close();
return names;
}
private static List<Integer> getMarks() {
List<Integer> names= new ArrayList<>();
Scanner scanner = new Scanner( System.in );
for ( int i = 0 ; i < 3; i++){
names.add(scanner.nextInt());
}
scanner.close();
return names;
}
}
Эта ошибка возникает сразу после того, как я прочитал имена. Почему может возникнуть ошибка.




Ваш сканер принимает System.in в качестве входного потока. Когда вызывается scan.close(), он закрывает как ваш сканер, так и входной поток. Потоки, которые закрыты, не могут быть повторно открыты.
Если вы хотите закрыть свой сканер, вы можете создать один сканер в своем основном методе, который вы можете закрыть позже. Это может быть передано в качестве параметра вашим двум другим методам.
Вы можете назвать свой код так
public static void main(String[] args) {
Scanner scanner = new Scanner( System.in );
System.out.println("Insert Names:");
List<String> names = getNames( scanner );
System.out.println("Insert Marks:");
List<Integer> marks = getMarks( scanner );
for (int i = 0; i < names.size(); i++) {
String name = names.get(i);
int mark = marks.get(i);
System.out.println( name + " - " + mark);
}
scanner.close();
}
private static List<String> getNames(Scanner scanner) {
List<String> names= new ArrayList<>();
for ( int i = 0 ; i < 3; i++){
names.add(scanner.nextLine());
}
return names;
}
private static List<Integer> getMarks( Scanner scanner) {
List<Integer> names= new ArrayList<>();
for ( int i = 0 ; i < 3; i++){
names.add(scanner.nextInt());
}
return names;
}
Возможный дубликат java.util.NoSuchElementException - Сканер читает пользовательский ввод