将未知数量的数字添加到 arraylist

Adding unknown number of numbers to arraylist

我正在尝试在 Java 中制作一个插入排序算法,我希望它读取用户输入,并且 he/she 可以输入他们想要的任意数量的数字(我们会说他们现在都是整数,但是 long 运行 能同时做整数和 doubles/floats) 就好了,我希望算法能把它们全部排序。我的问题是,当我 运行 此代码查看整数是否正确添加时,我的循环永远不会停止。

public class InsertionSort {
public static void main(String[] args){
    System.out.println("Enter the numbers to be sorted now: ");
    ArrayList<Integer> unsortNums = new ArrayList<Integer>();
    Scanner usrIn = new Scanner(System.in);

    while(usrIn.hasNextInt()) {
        unsortNums.add(usrIn.nextInt());
        System.out.println(unsortNums);    //TODO: Doesn't stop here
    }
    sortNums(unsortNums);
  }
}

现在,我怀疑它与扫描器执行 .hasNextInt() 的方式有关,但我终究无法弄清楚为什么它不停止。这可能是 IDE 特定的东西吗?我正在使用 Intellij Idea。

如果我遗漏了任何需要包含的内容,请告诉我。

System.in 上使用扫描仪时,它只会阻塞并等待用户的下一次输入。一种常见的处理方式是告诉用户某个幻数,例如 -999,将停止输入循环:

System.out.println("Enter the numbers to be sorted now (-999 to stop): ");
List<Integer> unsortNums = new ArrayList<Integer>();
Scanner usrIn = new Scanner(System.in);

int i = usrIn.nextInt();
while(i != -999) {
    unsortNums.add(i);
    i = usrIn.nextInt();
}

只要您停止向输入流添加数字,您的代码就会停止。 nextInt() 正在寻找另一个整数值,如果找不到,它将停止循环。

试一试 - 输入任何不能解释为 int 的字符序列,您的循环就会停止。

例如,此序列将停止迭代:1 2 3 4 5 6 7 8 9 7/。原因是7/不能读成int,所以hasNextInt的条件不成立。