我正在尝试用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。
如果我遗漏了需要包含的内容,请告诉我。
答案 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();
}