我已经看了一遍又一遍,但我还没有“找到”这个问题的答案。我主要使用 C++,但不久前开始在大学学习 Java 类(class),并且使用它的次数更多。我想知道在 Java 中是否有类似的东西。
while (!(cin >> var))
{
//do stuff
cin.clear();
cin.ignore(100, '\n');
}
当有人向变量中键入无效类型时,例如将 char 或字符串键入 int/double 等,这将重复循环。然后它清除标志并忽略 100 个单位,直到换行符。如果它是有效输入,则将其放入变量中。
到目前为止,我为 Java 想出的所有方法都是使用诸如
while (!scanner.hasNextInt())
{
//do stuff
scanner.next();
}
var = scanner.nextInt();
当我尝试使用它时,有时消息会重复两次,具体取决于我写了多少个字符,诸如此类。这是进行此类输入验证的最佳方式吗?我可能做错了什么,但这段 Java 代码的行为应该与 C++ 代码中的行为完全相同还是非常相似?
编辑:
又试了下,好像是我之前做的不对,之前看到的方法还是可以的。
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int var1, var2;
System.out.println("Enter int.");
while(!scanner.hasNextInt())
{
System.out.println("Wrong input, enter integer.");
scanner.nextLine();
}
var1 = scanner.nextInt();
var2 = scanner.nextInt();
System.out.println(var1 + " " + var2);
}
这是我用过的。我需要从用户那里得到两个整数,我不知道自己在做什么,但这似乎可行。
最佳答案
关键是扫描器使用的分隔符。默认情况下,\n 不是唯一的分隔符,通常任何空格都是分隔符。调用 scanner.next() 不会跳到下一次,它会跳到下一个“标记”。如果您想忽略当前输入行并跳到下一行,请使用 scanner.nextLine()
来源:https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
“扫描器使用分隔符模式将其输入分解为标记,默认情况下匹配空格。”
关于java - 用于输入验证的从 C++ 到 Java 的等效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255902/