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

Java 将未知数量的数字添加到arraylist,java,insertion-sort,Java,Insertion Sort,我正在尝试用Java制作一个插入排序算法,我希望它能够读取用户输入,用户可以输入任意数量的数字(我们现在说它们都是整数,但从长远来看,能够同时进行整数和双精度/浮点运算会很好),我希望该算法能够将它们全部排序出来。我的问题是,当我运行这段代码查看整数是否正确相加时,我的循环从未停止过 public class InsertionSort { public static void main(String[] args){ System.out.println("Enter the numb

我正在尝试用Java制作一个插入排序算法,我希望它能够读取用户输入,用户可以输入任意数量的数字(我们现在说它们都是整数,但从长远来看,能够同时进行整数和双精度/浮点运算会很好),我希望该算法能够将它们全部排序出来。我的问题是,当我运行这段代码查看整数是否正确相加时,我的循环从未停止过

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);
  }
}
公共类插入排序{
公共静态void main(字符串[]args){
System.out.println(“现在输入要排序的数字:”);
ArrayList unortnums=新的ArrayList();
扫描仪usrIn=新扫描仪(System.in);
while(usrIn.hasNextInt()){
add(usrIn.nextInt());
System.out.println(unortnums);//TODO:不会在这里停止
}
sortNums(非门户);
}
}
现在,我怀疑这与扫描仪如何执行.hasNextInt()有关,但我一辈子都不明白为什么它没有停止。这可能是IDE特有的东西吗?我用的是Intellij


系统上使用扫描仪时,如果我遗漏了需要包含的内容,请告诉我。

。在
中,它只是阻塞并等待用户的下一次输入。一种常见的处理方法是告诉用户一些幻数,例如,
-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();
}
System.out.println(“输入要立即排序的数字(-999停止):”;
List unsortNums=new ArrayList();
扫描仪usrIn=新扫描仪(System.in);
int i=usrIn.nextInt();
而(i!=-999){
补充(i);
i=usrIn.nextInt();
}

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

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


例如,这个序列将停止迭代:
1234567897/
。原因是
7/
不能读取为int,因此
hasnetint
的条件失败。

问题与IDE本身无关,因此我已删除该标记。您提供了哪些有问题的输入?阅读扫描仪文档–
nextInt()
可能正在阻止等待输入。您希望如何打破循环?您正在使用什么输入进行测试?Scanner.hasNextInt()等待用户点击enter并检查输入是否为Integer类型。例如,当用户输入其他内容时,“完成”,Scanner.hasNextInt()返回false并退出循环。因此,给用户一个提示,在完成他的整数列表后应该做什么。Makoto,这很好,只是为了安全起见添加了它。Barq,我刚才试过“1 2 3 4”,显然没有引号。我想知道:我能用一个分隔符,比如逗号,来分隔数字,让扫描仪检查所有的逗号吗?因此,如果输入的数字类似于1,2,3,4,它会添加数字,当它看不到逗号时就会停止?为什么要麻烦呢?添加更友好的消息,如“输入一个句号或输入完数字后停止”更简单,不需要修改实际的阅读逻辑。好的,我明白你的意思。我想我会那样做的。谢谢