尝试在数组中输入负值时如何打印错误消息?

时间:2014-03-19 21:39:09

标签: java arrays

如何在将数据输入数组时在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.

3 个答案:

答案 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语句的逻辑似乎不正确。