java - 用于输入验证的从 C++ 到 Java 的等效代码

标签 java c++ code-translation

我已经看了一遍又一遍,但我还没有“找到”这个问题的答案。我主要使用 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/

相关文章:

java - 老掉牙的 ORA-12705 : Cannot access NLS data files or invalid environment specified and java Locale. setDefault()

java - Android BitmapFactory.decodeFile skia 错误

c++ - 如何简化 C++ 中的嵌套名称说明符?

c++ - &(int) { 1 } 在 C++ 中是什么意思?

com - 签署 F# 程序集(强名称组件)

java - Java 中的加密和解密

java - 在 fragment 被分离然后重新附加后, fragment onResume 不会被调用

c++ - apache Thrift TNonblockingServer 错误

c# - VBNET 中 (IntPtr)1 的等价物?

compiler-construction - 如何开始编写翻译器?可能吗