当前位置: 首页 > 知识库问答 >
问题:

Scanner nextInt() 和 hasNextInt() 问题

申屠涛
2023-03-14

我正在研究为什么scan.nextInt()从第二次迭代开始使用前一个整数。任何人都可以理解正在发生的事情,并解释“扫描仪不会超过任何输入”的确切含义吗?

请忽略无限循环。这只是为了测试目的。

示例:
输入新数据:0
0
数据输入
再次输入数据:1
执行
输入新数据:1

    while(true)
    {
        System.out.print("Enter new data: ");
        System.out.println(scan.nextInt());
        //scan.nextLine();    //must include but I'm not sure why 
        System.out.println("data entered");
        System.out.print("Enter data again: ");
        if(scan.hasNextInt())
        {
            System.out.println("executed");
            //scan.nextLine();    //must include this too but not sure why
        }
    }

共有1个答案

籍星汉
2023-03-14

一般的模式是这样的:

while(scan.hasNextInt())
{
    System.out.println(scan.nextInt());
}

首先你要确保有下一个int,如果有下一个,你就用它做点什么。你正以相反的方式做它。首先你消耗它,然后你检查是否有另一个,这是错误的。

为什么我们应该在nextXXX之前调用hasNextXXX?因为如果没有这样的下一个令牌,nextXXX可以抛出NoSuchElementException。看这个例子:

String str = "hello world";
Scanner scan = new Scanner(str);

这个字符串中没有整数,这意味着

System.out.println(scan.nextInt());

将抛出NoSuchElementException。但是如果您使用我编写的while循环,您首先检查输入中是否有整数,然后再尝试对其执行任何操作。因此,这是标准模式,而不是处理不必要的异常。

 类似资料:
  • 问题内容: 所以我想让我的程序读取一个输入,该输入在一行中有一些整数,例如: 1 1 2 然后,它应该分别读取每个整数并在新行中打印。程序必须读取的整数数量没有预先给出,所以我想做的是使用while循环,该循环在没有更多的整数可读取之后结束。这是我写的代码: 但是它不能正常工作,因为循环永远不会结束,它只希望用户输入更多的整数。我在这里想念什么? 问题答案: 扫描程序基本上会等到文件结束进入。如果

  • 我试图创建一个程序,它提示用户输入一个输入,只有当输入是整数时才显示输出 null 任何形式的帮助都将不胜感激!:)

  • 问题内容: 这里是新程序员。这可能是一个非常基本的问题,但这仍然让我感到困扰。 我想做的是编写一种方法,该方法仅提供一个整数输入,因此我可以在主程序中使用该输入,而不必弄乱非整数输入。但是,即使编写使用自己的方法来执行此操作的方法似乎也是有问题的。 这似乎在多个层面上都被打破了,但我不确定为什么。 如果我在首次输入时输入了0或1之类的整数值,则应该完全跳过循环。但是,相反,它进入了循环,并打印“请

  • 我在爪哇是全新的,这一个把我扔了。使用下面的代码,它对第一个问题进行循环,直到我输入除整数以外的任何内容,但在完成循环后,它不会对剩余的问题停止。 通过一些研究和阅读,我发现我需要使用in.nextline()在输入后使用换行符。但是,无论我把nextLine()放在哪里,它都不起作用?我认为应该在第一个int input=in.nextint()之后;但那不起作用。关于它会去哪里以及为什么要去,

  • 我是Java的新手,这一次把我甩了。使用下面的代码循环第一个问题,直到我输入除整数以外的任何内容,但循环结束后,它不会停止处理剩余的问题。 通过一些研究和阅读,我发现我需要使用in.nextLine()来读取输入后的换行符。但是,无论我将nextLine()放置在何处,它都无法工作?我以为它会在第一个int input=in.nextInt()之后;但这行不通。有没有关于它会去哪里以及为什么的帮助

  • 问题内容: 我一直在学习redis和node.js。我有两个问题,找不到令人满意的答案。 我的第一个问题是关于在node.js中重用Redis客户端。我找到了这个问题和答案:如何在socket.io中重用Redis连接,但还不足以让我满意。 现在,如果我在连接事件中创建redis客户端,它将为每个连接生成。因此,如果我有2万个并发用户,那么将有2万个Redis客户端。 如果我将其放在连接事件之外,