【问题标题】:HasNextInt() Infinite loop [closed]HasNextInt() 无限循环
【发布时间】:2016-01-10 02:44:49
【问题描述】:
//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. 它们之间有一个空格。我要做的就是在使用两个扫描仪时读取整数并将其放入列表中。

【问题讨论】:

  • 如果您希望它在某个时候退出,则不能使用它 - 此代码将在输入上阻塞 forever。您希望您的程序如何知道输入何时完成?
  • sc 基于什么?控制台输入?
  • 您在发帖前似乎不小心删除了问题的前半部分。你能把它加回来吗?
  • 使用 2 个扫描仪似乎不必要地复杂。您是否考虑过更改分隔符Example
  • 我还是不知道你想做什么。问题是什么?

标签: java loops infinite


【解决方案1】:

根据您的评论

用户可以输入多个数量未知的整数。例如: 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);

【讨论】:

  • 这正是我想要的。这就是我想知道如何使用第二台扫描仪来满足我的好奇心。谢谢你。另一个快速的问题,处理这个问题的最佳做法是什么?
  • 没有最佳解决方案,因为解决方案取决于您希望代码如何工作。最佳实践建议首先编写易于使用的代码,并且仅在导致系统运行缓慢时才更改它,因此我认为此解决方案应该适合您。
【解决方案2】:

试试这个:

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
    }
}

【讨论】:

  • 我不认为这会起作用,因为我们没有消耗输入?
  • 请重新定义您的代码
【解决方案3】:
    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;
        }
     }

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多