0

我在这里有这段代码:

Scanner input = new Scanner(System.in);
int array[] = new int[10];

System.out.println("Enter the numbers now.");

for (int i = 0 ; i < array.length; i++ ) {        
    if (input.nextInt() == 999){        
        break;
    } else {
        array[i] = input.nextInt();
    }
}

如果用户在数组中输入 999 但到目前为止还没有运气,我想跳出循环。我尝试使用 break 或 return false 但没有任何效果。有没有人有办法解决吗?非常感谢!

4

4 回答 4

5

您正在使用input.nextInt();两次。那是从控制台读取ifelse

 for (int i = 0 ; i < array.length; i++ ) {
      int enteredNumber = input.nextInt();
      if (enteredNumber == 999){
          break;
      } else {
         array[i] = enteredNumber ;
      }
 }
于 2013-08-30T04:52:43.877 回答
4

您在循环内阅读了两次。因此,如果您的if条件是虚假的(用户没有输入999),那么它将进入else您正在从用户那里读取新输入的块,这可能是999.

将循环更改为:

for (int i = 0 ; i < array.length; i++ ) {
    int read = input.nextInt();
    if (read == 999) {
        break;
    }
    array[i] = read;
}

除此之外,您还应该考虑用户实际上没有传递整数的情况,在这种情况下,您的代码将会崩溃。您可以为此使用Scanner#hasNextInt()方法。

for (int i = 0 ; i < array.length; i++ ) {
    while (!input.hasNextInt()) {
        System.out.println("You must pass an integer");
        input.next();  // Advance the scanner past the current line.
    }
    int read = input.nextInt();
    if (read == 999) {
        break;
    }
    array[i] = read;
}

当然,如果用户继续输入非整数值,该循环可能会永远运行。为了克服这个问题,您可以为用户提供最大尝试次数。那我就交给你处理了。(提示:您需要一个从 0 到最大值的计数器。在每次循环迭代时,重置它)。

于 2013-08-30T04:53:54.873 回答
3

您目前拥有的方式是您在每次迭代中多次nextInt() 调用。

这意味着您将丢失数据。假设您首先输入 7。这在if语句中被选为“not 999”,因此它移动到else您要求用户输入另一个数字的子句(您丢失了 7)。

此外,只有在第一次调用nextInt(). 如果您在执行第二次调用时输入 999,它只会存储它并继续运行。

试试这个:

for (int i = 0 ; i < array.length; i++ ) {
    int next = input.nextInt();
    if (next == 999)
        break;
    array[i] = next;
}
于 2013-08-30T04:53:08.213 回答
1

在你的 for 循环中试试这个东西。

for (int i = 0 ; i < array.length; i++ ) {

int number = input.nextInt();

   if (number == 999){
        break;
    }
   System.out.println("aghsdgha" + number);

}

这是检查输入数字的更简单和更清晰的方法。

于 2013-08-30T05:03:52.500 回答