Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
抛出java.util.NoSuchElementException的程序_Java - Fatal编程技术网

抛出java.util.NoSuchElementException的程序

抛出java.util.NoSuchElementException的程序,java,Java,我已经为一门课写了下面的程序。它应该读取并验证用户输入的2个数字和一个字符,重复直到提供有效的输入。然后,它必须使用指定的字符打印出给定维度的棋盘格图案。当我将程序提交给所需的自动测试服务时,它的分数只有93.3%。我不明白错误报告想告诉我什么。这是我的密码: import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner

我已经为一门课写了下面的程序。它应该读取并验证用户输入的2个数字和一个字符,重复直到提供有效的输入。然后,它必须使用指定的字符打印出给定维度的棋盘格图案。当我将程序提交给所需的自动测试服务时,它的分数只有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();
                }
            }
        }
    }
}

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

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

检查输入数据或您的算法, 当您试图读取的数据超过可用数据时

比如说,, 此基本代码段提供相同的堆栈跟踪, 对于尝试读取超过输入数据末尾的数据:

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

我怀疑Solid是测试用例的名称

异常是告诉您,在执行Scanner.next的过程中,结果是没有更多可用的输入,输入流的结尾已经到达。所讨论的方法调用出现在文件Main.java的第31行,如果我计算正确,则如下所示:

                gridArray[2] = sc.next();
第一次出现。要么是法官提供的输入格式不正确,在这种情况下法官显然希望程序以不同的方式处理问题,要么是您的程序以某种方式对其进行了错误的解析

我认为很可能是解析错误,但无论如何,请仔细阅读问题规范。尤其要注意被空格分隔和被一个空格分隔的区别。还要注意哪些输入有效的所有细节


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

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

也许可以检查您的空白。我刚刚检查过,它似乎没有任何问题。在Java中,字符串对象是不可变的,也就是说,它们永远无法更改。trim方法和所有方法一样,不会改变字符串的内容;它返回一个新的字符串对象,删除了前导和尾随空格。您的代码忽略了返回的对象,这使得您对trim的调用与不执行任何操作一样。
Scanner scanner = new Scanner("1 2");
scanner.next();
scanner.next();
scanner.next();
                gridArray[2] = sc.next();