当前位置: 首页 > 面试题库 >

如何确保Scanner hasNextInt()要求新输入?

宁良平
2023-03-14
问题内容

这里是新程序员。这可能是一个非常基本的问题,但这仍然让我感到困扰。

我想做的是编写一种方法,该方法仅提供一个整数输入,因此我可以在主程序中使用该输入,而不必弄乱非整数输入。但是,即使编写使用自己的方法来执行此操作的方法似乎也是有问题的。

public static int goodInput () {
    Scanner input = new Scanner (System.in); //construct scanner
    boolean test = input.hasNextInt(); //set a sentinel value
    while (test == false) { //enter a loop until I actually get an integer
        System.out.println("Integers only please"); //tell user to give me an integer
        test = input.hasNextInt(); //get new input, see if it's an integer
    }
    int finalInput = input.nextInt(); //once i have an integer, set it to a variable
    input.close(); //closing scanner
    return finalInput; //return my integer so I don't have to mess around with hasNextInt over there
}

这似乎在多个层面上都被打破了,但我不确定为什么。

如果我在首次输入时输入了0或1之类的整数值,则应该完全跳过循环。但是,相反,它进入了循环,并打印“请只输入整数”。更糟糕的是,当我在那儿时,它实际上并没有要求输入,而只是重复打印该行。

我了解后一个问题可能是由于令牌问题引起的,但是我不确定如何解决它们。关闭然后重新打开扫描器,Eclipse会通过“重复对象”使我烦恼,只是将旧输入分配给一个从未使用过的垃圾字符串变量,这告诉我在运行时“未找到行”,并且我经验不足想办法获得新的投入。

即使解决了这个问题,在拥有整数的情况下,我也需要找到某种避免进入循环的方法。我真的不明白为什么整数输入会在循环开始时出现,所以我不确定这怎么可能。

请帮忙?抱歉,这是一个老问题了;尝试查看过去的问题,但似乎没有一个问题与我的问题相同。


问题答案:

您接近了:这对我来说很好:

Scanner input = new Scanner(System.in); //construct scanner
while(!input.hasNextInt()) {
    input.next(); // next input is not an int, so consume it and move on
}
int finalInput = input.nextInt();
input.close(); //closing scanner
System.out.println("finalInput: " + finalInput);

通过input.next()在while循环中调用,您将消耗非整数内容,然后再试一次,直到下一个输入为int为止。



 类似资料:
  • 我需要使用while循环来询问用户一个介于1-100之间的数字,如果用户输入的数字是负数或超过100,我会告诉用户他们输入了错误的数字。这是我到目前为止的情况。每当我运行它时,它都会要求用户输入。当输入为负数或大于100时,它表示无效数字,而当用户输入为45时,当0-100之间的数字有效时,它仍表示无效数字。我不认为这是阅读代码的最后一部分。

  • 我已经看了这个程序几个小时了,但我仍然不明白其中的逻辑。程序要求用户输入整数。 一旦用户输入了整数,它将向用户输出所有的正数、负数和输入的总数,以及这些数字的平均值。 这是我陷入困境的地方: 然后它会询问用户是否要继续。用户将输入或以指示他们是否要继续。如果用户输入“y”,循环将再次进行,如果他们输入“n”,它将显示再见消息。我不知道如何设置。 我已经尝试了一个 do while 循环,我目前正在

  • 过滤用户数据是Web应用安全的基础。它是验证数据合法性的过程。通过对所有的输入数据进行过滤,可以避免恶意数据在程序中被误信或误用。大多数Web应用的漏洞都是因为没有对用户输入的数据进行恰当过滤所引起的。 我们介绍的过滤数据分成三个步骤: 1、识别数据,搞清楚需要过滤的数据来自于哪里 2、过滤数据,弄明白我们需要什么样的数据 3、区分已过滤及被污染数据,如果存在攻击数据那么保证过滤之后可以让我们使用

  • 我正在制作一个简单的石头剪刀程序,但不确定如何确保用户只输入有效的选项。如果他们不键入“石头”、“纸”或“剪刀”(大写不重要)等变量,然后再键入“是”或“否”,我需要能够对他们进行谴责。建议? }

  • 我有一个示例程序,用于为航空公司注册人员。 在Registration类的selectSeats方法中,我有一个try-catch块,其中catch语句应该捕获InputMissMatchException,以防用户输入非数值。 但是,重新输入操作没有发生,因此,当发生异常时,程序只是抛出错误消息并继续到末尾(这会导致意外结果) 这就是有问题的方法 编辑:我通过使方法在catch块中递归来解决这个

  • 我正在写一个叫做hangman.py的程序。在我的程序中,用户不能在我的输入中输入“?”或空白。例如,用户不能输入“?xx?xx?”或“我该怎么做”。但用户可以输入诸如“ldkdjgg”或“stop-go”之类的内容。如果用户输入诸如“?xxxxx”或“我该怎么做”之类的内容,我必须不断询问用户请输入一个不包含的要猜测的单词?或空白:“.我的问题是如何打印”请输入一个不包含字符的要猜测的单词?或空