程序抛出java.util.NoSuchElementException

时间:2015-10-02 19:44:31

标签: java

我已经在下面写了一个课程。它应该读取并验证用户输入(2个数字和一个字符),重复直到提供有效输入。然后,它必须使用指定的char打印出给定尺寸的棋盘图案。当我将程序提交给所需的自动化测试服务时,它的得分仅为93.3%。我无法弄清楚错误报告试图告诉我的内容。这是我的代码:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter the number of rows, columns, and fill character: ");
        // userInput = sc.nextLine();

        String[] gridArray = new String[3]; // split by spaces

        gridArray[0] = sc.next();
        gridArray[1] = sc.next();
        gridArray[2] = sc.next();

        gridArray[0].trim();
        gridArray[1].trim();
        gridArray[2].trim();

        int row, column;
        row = Integer.parseInt(gridArray[0]);
        column = Integer.parseInt(gridArray[1]);

        if (row <= 0 || column <= 0 || gridArray[2].length() >= 2) {
            while (row <= 0 || column <= 0 || gridArray[2].length() >= 2) {
                System.out.println("Enter the number of rows, columns, and fill character: ");

                gridArray[0] = sc.next();
                gridArray[1] = sc.next();
                gridArray[2] = sc.next();

                gridArray[0].trim();
                gridArray[1].trim();
                gridArray[2].trim();

                row = Integer.parseInt(gridArray[0]);
                column = Integer.parseInt(gridArray[1]);

            }
        }
        System.out.println("Solid:");

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                System.out.print(gridArray[2]);
                if (j == column - 1) {
                    System.out.println();
                }
            }
        }

        System.out.println("Checkerboard:");

        for (int x = 0; x < row; x++) {
            for (int y = 0; y < column; y++) {
                if (x % 2 == 1) {
                    if (y % 2 == 0) {
                        System.out.print(" ");
                    } else {
                        System.out.print(gridArray[2]);
                    }
                } else {
                    if (y % 2 == 0) {
                        System.out.print(gridArray[2]);
                    } else {
                        System.out.print(" ");
                    }
                }
                if (y == column - 1) {
                    System.out.println();
                }
            }
        }
    }
}

这就是错误:

固体(错误上方的单词)

symptom: java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1416)
at csc212hw04.Main.main(Main.java:31)

测试服务是WEB-CAT,如果有帮助的话。

3 个答案:

答案 0 :(得分:0)

当扫描仪无法找到更多数据时,可能会发生您描述的异常。 错误消息告诉您这发生在第31行:

gridArray[2] = sc.next();

检查输入数据或算法, 当你试图阅读比可用数据更多的数据时。

例如, 这个原始片段给出了相同的堆栈跟踪, 试图读取输入数据的结尾:

Scanner scanner = new Scanner("1 2");
scanner.next();
scanner.next();
scanner.next();

答案 1 :(得分:0)

我怀疑&#34; Solid&#34;是测试用例的名称。

异常告诉你,在执行Scanner.next()的过程中,结果发现没有更多的输入可用(已到达输入流的末尾)。有问题的方法调用显示在文件Main.java的第31行,如果我已经正确计算了这个:

                gridArray[2] = sc.next();

(第一次出场)。法官提出的输入都是格式错误的,在这种情况下,法官显然希望程序以不同方式处理问题,或者您的程序以某种方式错误地解析它。

我认为您更有可能正确解析,但不管怎样,请仔细阅读问题规范。特别要注意区分,例如“空格分隔”和“#34;之间的区别”。并且&#34;由[确切]一个空格隔开&#34;。还要注意哪些输入有效的所有细节。

部分基于失败测试用例的名称,我推测或许输入提供空格字符作为填充字符。如果假定第二维与填充字符分开固定数量的空格(例如一个),则这是可能的。在这种情况下,您可能需要与Scanner不同的方法来阅读输入。

答案 2 :(得分:0)

测试服务可能会为您提供一个小于预期输入值的测试用例。查看Scanner API的hasNext()方法以获取灵感。