如何在将数据输入数组时在Java中打印错误消息。
for (rows = 0; rows < bandstand.length; rows++){
System.out.print ("Please enter number of positions in row " + (char)(rows + (int) 'A'));
columns = keyboard.nextInt();
bandstand[rows] = new double [columns];
while ( columns < 0){
System.out.print ("ERROR: Out of range, try again:");
columns = keyboard.nextInt();
}
}
Exception in thread "main" java.lang.NegativeArraySizeException.
答案 0 :(得分:1)
就具体细节而言,你有几个选择,但大多数情况下,他们都只需要检查columns
的值是否有意义之前来创建数组(您的主要数据)错误是试图在尝试重新提示有效输入之前创建数组。例如,您可以反复提示用户输入:
for (rows = 0; rows < bandstand.length; rows++){
do {
System.out.print ("Please enter number of positions in row " + (char)(rows + (int) 'A'));
columns = keyboard.nextInt();
} while (columns < 0);
...
或者,如果需要特殊的错误信息,就像你现在一样:
for (rows = 0; rows < bandstand.length; rows++){
System.out.print ("Please enter number of positions in row " + (char)(rows + (int) 'A'));
columns = keyboard.nextInt();
while (columns < 0) {
System.out.print ("ERROR: Out of range, try again:");
columns = keyboard.nextInt();
}
...
// note that array is created *after* columns is validated
你也可以通过以下方式完成类似的事情(根据你当前的逻辑):
for (rows = 0; rows < bandstand.length; rows++){
System.out.print ("Please enter number of positions in row " + (char)(rows + (int) 'A'));
columns = keyboard.nextInt();
if (columns < 0) {
System.out.println("Columns must be >= 0!");
continue; // starts over for this row
}
...
总的目标是确保无论如何,在创建数组时,columns >= 0
。
你也可以抓住NegativeArraySizeException
然后回去再问一遍,但我建议在这种情况下反对这一点,主要是因为你的代码会更复杂一些(继续,试试吧) 。在一般情况下,这种方法也存在一些问题;例如,当您抛出异常时,您知道columns
是否定的,但您不知道为什么 - 您输入值时的信息比您输入的信息多。错误使用该值的时间(在更复杂的程序中更重要),因此您可以以更有意义的方式处理错误(例如,打印错误并再次提示输入),以及超出此范围的其他原因。 / p>
答案 1 :(得分:0)
只需在设置while
的行之前移动bandstand[rows]
循环即可完成我想要的内容:
for (rows = 0; rows < bandstand.length; rows++){
System.out.print ("Please enter number of positions in row " + (char)(rows + (int) 'A'));
columns = keyboard.nextInt();
while ( columns < 0){
System.out.print ("ERROR: Out of range, try again:");
columns = keyboard.nextInt();
}
bandstand[rows] = new double [columns];
}
当while
循环完成后,您将确定columns >= 0
,因此new double[columns]
将有效。
答案 2 :(得分:-1)
for (rows = 0; rows < bandstand.length; rows++){
System.out.print ("Please enter number of positions in row " + (char)(rows + (int) 'A'));
columns = keyboard.nextInt();
if(columns >= 0) {
bandstand[rows] = new double [columns];
}
while ( columns < 0){
System.out.print ("ERROR: Out of range, try again:");
columns = keyboard.nextInt();
}
}
}
在插入数组之前,检查列是否大于或等于零。
但是,您的下一个while
语句的逻辑似乎不正确。