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