public class Player {
private ArrayList<String> players = new ArrayList<String>();
private int maxPlayers = 0;
public ArrayList<String> setPlayers(ArrayList<String> strArrList) {
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= getMaxPlayers(); i++) {
System.out.print("Player #" + i + ": ");
String name = sc.next();
strArrList.add(name);
System.out.println();
}
return strArrList;
}
public void setMaxPlayers() {
Scanner sc = new Scanner(System.in);
System.out.print("How many players? ");
maxPlayers = sc.nextInt();
System.out.println();
sc.close();
}
public ArrayList<String> getPlayers() {
return players;
}
public int getMaxPlayers() {
return maxPlayers;
}
}
public class Main {
public static void main(String[] args) {
Player pl = new Player();
pl.setMaxPlayers();
pl.setPlayers(pl.getPlayers());
}
}
How many players? 2
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at com.arsaii.drinkgame.Player.setPlayers(Player.java:18)
at com.arsaii.drinkgame.Main.main(Main.java:10)
Process finished with exit code 1
我知道NoSuchelementException
是什么意思(有点..)但是我也尝试在main方法中的不同测试类中使用来自Player类的相同for循环,它工作了…这是否意味着我得到了一个NoSuchelementException
,因为它在一个方法中…有人能解释一下吗?
问题是在setmaxplayers()
方法中调用sc.close()
时。这也将关闭基础的系统。在
输入流中。
由于system.in
已关闭且无法重新打开,在setplayers()
中创建另一个system.in
包装system.in
的扫描程序将失败。
因此,最简单的解决方案,正如这里所建议的,就是如果
scanner
实例包装system.in
时,不关闭它。只需使用一个共享的scanner
实例,并且不关闭它(根本不关闭,或者至少如果您知道以后需要它的话)。
我的程序应该接受任何数据类型的文件输入并显示它。然而,在阅读第7个元素后,我得到错误“NoSuchelementException” 这是我的代码:
我必须写一个方法来找到最小的n,使得小于n的自然数之和超过k。但是,当我尝试测试该方法时,它不会返回任何值。 我尝试这样调用,在main方法中:
下面是抛出异常的代码的简化版本。 线程“main”java.util出现异常。NoSuchElementException:在temp.temp.getString(temp.java:13)的java.util.Scanner.nextLine(Scanner.java:1540)中找不到行 我两次调用方法,在第二次调用时它会中断: 现在,我明白删除行可以解决问题(并且可能也使成为静态变量)。我
Player类如下所示: 前面的main方法(它使用多个扫描器,包括try-with-recours,没有任何错误或异常)如下所示:
这是我唯一的代码:
问题内容: 我真的试图通过线程找到答案,但仍然希望能得到一些反馈。 我认为下面的代码风格不好,但是我不知道为什么在输入数字后会把我射杀 ,因为我为两个方法创建了两个Scanner对象,并且我应该能够开始一个新的输入。而且,如果我删除了inputAndPrintNumber()中的内容,它将正常工作并正确编译。我真的希望知道如果我仍然使用两个Scanner obj并且不删除(如果可能的话)为什么以及