我有一个问题是当我为数组2d输入值有效时,一切都已完成,但是当我为totalRow或totalColumn变量输入错误的值时,我的输入函数强制我输入double并在第二个中获取值。 这是我的代码:
public static void input() {
Scanner sc = new Scanner(System.in);
try {
System.out.println("Input total totalRow: ");
totalRow = sc.nextInt();
// verify value input must be a positive integer and greater than zero
if (totalRow <= 0) {
System.out.println("Input value must be a positive integer and greater than zero!");
input();
}
System.out.println("Input total totalColumn: ");
totalColumn = sc.nextInt();
// verify value input must be a positive integer and greater than zero
if (totalRow <= 0) {
System.out.println("Input value must be a positive integer and greater than zero!");
input();
}
// check case array must be square array
if (totalRow != totalColumn) {
System.out.println("Array must be square!");
input();
}
} catch (InputMismatchException e) {
// print message when user input other than integer
System.out.println("Please input an integer!");
input();
}
// initialize array with totalRow and totalColumn
array = new char[totalRow][totalColumn];
// input value for array
for (int i = 0; i < totalRow; i++) {
for (int j = 0; j < totalColumn; j++) {
array[i][j] = sc.next().charAt(0);
}
}
}
示例:我输入2和a totalRow和totalColumn:消息出现,我重新输入是2和2,但我已输入1 2 3 4 5 6 7 8为数组,值为5。
答案 0 :(得分:2)
这里有一些让你的代码失败的事情:
totalRow <= 0
两次(确保复制粘贴错误)如果条件不满足,则再次调用输入: 执行此操作将使该方法的递归实现,这可能导致不希望重复的序列,使用户和开发人员疯狂
您忘记了scanner.nextInt不会消耗您输入的最后一个换行符
我建议通过执行以下操作来修改代码:
if (totalRow <= 0) {
System.out.println("Input value must be a positive integer and greater than zero!");
//input();
}
System.out.println("Input total totalColumn: ");
totalColumn = sc.nextInt();
sc.nextLine();
// verify value input must be a positive integer and greater than
// zero
if (totalColumn <= 0) {
System.out.println("......
答案 1 :(得分:0)
递归算法存在问题。即使它适用于正确的输入,输入错误也会反复询问值。因为当你犯了任何错误输入()功能将从头开始。因此,如果您想更好地使用递归来为 input_Total_Column()和 input_Total_Row()使用单独的函数。 还有一个复制粘贴错误。您在代码中检查了两次 totalColumn&lt; = 0 //你的代码//
`for(int i = 0; i&lt; totalRow; i ++){
for (int j = 0; j < totalColumn; j++) {
array[i][j] = sc.next().charAt(0);
}
}
}`
如果你在raw中输入值,这似乎是一个不正确的逻辑。 charAt(0)将在inedex 0处返回一个字符(只有。所以它始终会在开始时返回字符。请尝试这样做。 string array_input = sc.nextLine(); 使用.split()函数拆分字符串。 然后,您可以使用相应字符串值的Integer.parseInt()轻松地将值转换为整数。