HasNextInt()无限循环

时间:2015-10-12 14:56:44

标签: java loops infinite

//input: multiple integers with spaces inbetween
    Scanner sc = new Scanner(System.in);
    while(sc.hasNextInt())
    {
      //add number to list
    }

sc.hasNextInt()正在等待integer。只有输入non-integer字符才会突然出现。

我不久前在这里看到了一个解决方案,但我再也找不到了。

解决方案(如果你问我最好)是使用两台扫描仪。我似乎无法弄清楚它是如何使用两台扫描仪来解决这个问题的。

sc.NextLine()也许?

用户可以输入数量未知的多个整数。例:3 4 5 1.他们之间有一个空间。我想要做的就是读取整数并将其放入列表中,同时使用两个扫描仪。

3 个答案:

答案 0 :(得分:0)

试试这个:

while (sc.hasNext()) {
    if (sc.hasNextInt()) {
       // System.out.println("(int) " + sc.nextInt());
       // or add it to a list
    }
     else {
       // System.out.println(sc.next());
       // or do something
    }
}

答案 1 :(得分:0)

    Scanner sc = new Scanner(System.in);
    while(sc.hasNextInt())
    {

        System.out.println("Hi");
        System.out.println("Do you want to exit ?");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.next().equalsIgnoreCase("Yes")){
            break;
        }
     }

答案 2 :(得分:0)

根据您的评论

  

用户可以输入数量未知的多个整数。例:3 4 5 1.他们之间有一个空间。我想要做的就是读取整数并将其放入列表中,同时使用两个扫描仪。

您可能正在寻找:

  • 扫描仪将从用户读取行(如果需要,可以等待下一行)
  • 另一台扫描仪将处理从行分割每个号码。

所以你的代码看起来像:

List<Integer> list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
System.out.print("give me some numbers: ");
String numbersInLine = sc.nextLine();//I assume that line is in form: 1 23 45 

Scanner scLine = new Scanner(numbersInLine);//separate scanner for handling line
while(scLine.hasNextInt()){
    list.add(scLine.nextInt());
}
System.out.println(list);