0

我在教科书中做一个练习题,将整数(负数和正数)添加到数组中。我希望用户能够在数组结束之前终止将数字输入到数组中 [50]。

这就是我想出的:

用户输入存储在字符串中的数字。如果 keepLo​​oping 为 true 并且 index < 数组的大小;它将逐个标记字符串解析标记并将数字放入 int 数组中。

必须有一个更简单的方法来做到这一点,我不能让我的代码工作,任何帮助将不胜感激:

// Create Objects to use in program
    Scanner keyboard = new Scanner(System.in);
    int[] arrayOfNumbers = new int[50];


    // Prompt for input
    System.out.println("Enter upto 50 integers separated by a space.");
    System.out.println("Type x to signal no more integers to enter.");

    int index = 0;
    boolean keepLooping = true;

    while (index < arrayOfNumbers.length && keepLooping) {
        String numToAdd = keyboard.nextLine();

        if ( numToAdd.equals("x") || numToAdd.equals("X") ) {
            keepLooping = false;
        }

        if ( !numToAdd.equals("x") || !numToAdd.equals("X") ) {
            arrayOfNumbers[index] = Integer.parseInt(numToAdd); 
        }
    }

    // DEBUG, Print Array
    for (int k=0; k < arrayOfNumbers.length; k++) {
        System.out.println(arrayOfNumbers[k]);
    }
4

3 回答 3

2

如果您逐步调试程序(例如,F6在 Eclipse 中使用 Stepping with),您会注意到index' 的值不会改变。最快的解决方法是:

while (index < arrayOfNumbers.length && keepLooping) {
    String numToAdd = keyboard.nextLine();

    if ( numToAdd.equals("x") || numToAdd.equals("X") ) {
        keepLooping = false;
    }

    if ( !numToAdd.equals("x") || !numToAdd.equals("X") ) {
        arrayOfNumbers[index] = Integer.parseInt(numToAdd); 
    }

    index++;
}


但是,当然,这只是解决了数组填充问题。然后是编程问题的良好实践,其余的答案完全涵盖了这些问题。

于 2013-09-03T01:10:54.770 回答
2

您可以使用循环简化一点for,然后break退出循环以退出:

for (int index = 0; index < arrayOfNumbers.length; ++index) {
  String numToAdd = keyboard.nextLine();

  if (numToAdd.equals("x") || numToAdd.equals("X")) {
    break;
  }
  arrayOfNumbers[index] = Integer.parseInt(numToAdd); 
}
于 2013-09-03T01:12:35.677 回答
0
int index = 0;
boolean keepLooping = true;

while (index < arrayOfNumbers.length && keepLooping) {
    String numToAdd = keyboard.nextLine();

    if (numToAdd.equalsIgnoreCase("x")) { // Use EqualsIgnoreCase to shorten it
        keepLooping = false;
    } else { // Use an else statement instead of evaluating the inverse
        arrayOfNumbers[index] = Integer.parseInt(numToAdd); 
    }
    index++; // Increment the index to avoid eternal loop and actually fill the array
}
于 2013-09-03T01:11:17.953 回答