我的扫描仪没有下一行,导致NoSuchElementFound异常

时间:2015-09-04 03:31:39

标签: java string user-interface java.util.scanner user-input

我正在尝试创建一个简单的应用程序,它接受一定数量的名称并从中创建锦标赛括号。现在我很难创造每场比赛的比赛数和参赛者数。按照目前的情况,我想创建一个故障保护,如果匹配中他们想要的人数与总人数不均匀,则会向用户发出警告。我要求他们只需输入'Y'或'N'来指示这一点。问题是该程序没有给他们输入响应的机会并自动吐出NoSuchElementFound异常:找不到行。

这是一款全新的扫描仪,可用于此响应。我尝试使用.hasNext来查看是否没有下一行,结果是false。基本上,在我获得所有参赛者(一个单独的方法工作正常)后,这就是控制台:

参赛者总数:5

您希望每场比赛有多少参赛者?

2

警告:选择此号码表示每场比赛的参赛者人数不会相同。

提醒参赛者总数为:5

如果要继续,请输入“Y”。如果您想在每场比赛中输入不同数量的参赛者,请输入“N”。

检查值:false

如果有帮助,这就是麻烦的代码:

    String answer = "yes";

    Scanner scan = new Scanner(System.in);      
    float roundedMatchCount = 0;

    float matchCount = 0;
    entrant victor = new entrant();

    float matchMembers;

    Scanner scan = new Scanner(System.in);

    System.out.println("How many contestants do you want to compete per match?");
    matchMembers = scan.nextInt();



    matchCount = input.size() / matchMembers;



    scan.close();

    Scanner s = new Scanner(System.in);


    if (input.size() % matchMembers !=0)
        //if the number of contestants is not divisble by the number 
        //of participants in a match
    {
        System.out.println("Warning: Choosing this number means that there will not be the same number of contestants in each match.");
        System.out.println("Reminder that the total number of contestants is: "
                +input.size());
        //begin while


            System.out.println("If you want to proceed, enter 'Y'. If you want to enter a different number of contestants per match, enter 'N'.");

            boolean check = s.hasNextLine();

            System.out.println("check value: " + check);

            answer = s.nextLine();
            //WHAT

            if (answer.contains("N"))
            {
                //ask for a new number

            }

            else if (answer.contains("Y"))
            {
              //round the number of matches up or down depending on user input
            }

            else
            {
                System.out.println("Error: Invalid response.");

            }


    }

请注意,输入是从前一个方法传递到此方法的ArrayList。我知道正确的条目数在里面,因为在之前的测试中我打印出了它的内容和大小。

1 个答案:

答案 0 :(得分:0)

正如KDM所指出的那样,我的问题是由于我关闭了以前的扫描仪。乘坐scan.close()解决了我的问题。