当前位置: 首页 > 知识库问答 >
问题:

方法内带有ArrayList的NoSuchElementException[重复]

施刚毅
2023-03-14
    null
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,因为它在一个方法中…有人能解释一下吗?

共有1个答案

谭毅然
2023-03-14

问题是在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并且不删除(如果可能的话)为什么以及