java - 如何确保 Scanner hasNextInt() 请求新输入?

标签 java input token java.util.scanner

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

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

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 这样的整数值,它应该完全跳过循环。但是,它进入循环,并打印“请只输入整数”。更糟糕的是,当我在那里时,它实际上并不要求输入,而只是重复打印该行。

我知道后一个问题可能是由于 token 问题造成的,但我不一定确定如何解决它们;关闭然后重新打开扫描仪会让 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);

通过在 while 循环中调用 input.next(),您可以消耗非整数内容并重试,直到下一个输入是 int。

关于java - 如何确保 Scanner hasNextInt() 请求新输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962939/

相关文章:

ios - iOS模拟器中文输入

parsing - ANTLR 4 : Bad grammar and 'no viable alternative at input'

asp.net - 不记名 token - 两个因素 - ASP.NET 身份

yyyymmddhhmmss 的 Java 正则表达式

java - XML 数据库 eXist 和语法验证

Java 8,随时间间隔的复杂分组

Java 到 C++ 语法

javascript - HTML 输入值属性 - 相同的输入,(显然)不同的结果

java - Apache Shiro Stateless - 无 session JWT token 身份验证问题

java - CAMEL 正在 "mv"命令完成之前处理文件