在arraylist中添加未知数量的数字

时间:2015-01-28 07:13:32

标签: java insertion-sort

我正在尝试用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);
  }
}

现在,我怀疑它与扫描仪如何处理.hasNextInt()有关,但我不能为我的生活找出它为什么不停止。这可能是IDE特定的东西吗?我正在使用Intellij Idea。

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

2 个答案:

答案 0 :(得分:1)

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

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

作为例如,此序列将停止迭代:1 2 3 4 5 6 7 8 9 7/。原因是7/不能作为int读取,因此hasNextInt的条件失败。

答案 1 :(得分:0)

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();
}