C++;到Java进行输入验证

C++;到Java进行输入验证,java,c++,code-translation,Java,C++,Code Translation,我已经看了一遍又一遍,我还没有找到答案。我主要使用C++,但在前一段时间开始在大学里学习java课程,并且一直在使用它。我想知道在Java中是否有这样的等价物 while (!(cin >> var)) { //do stuff cin.clear(); cin.ignore(100, '\n'); } 当有人在变量中键入无效类型(例如,在int/double中键入char或string等)时,会重复循环,然后清除标志并忽略100个单位,直到换行。如果它是一个有效

我已经看了一遍又一遍,我还没有找到答案。我主要使用C++,但在前一段时间开始在大学里学习java课程,并且一直在使用它。我想知道在Java中是否有这样的等价物

while (!(cin >> var))
{
   //do stuff
   cin.clear();
   cin.ignore(100, '\n');
}
当有人在变量中键入无效类型(例如,在int/double中键入char或string等)时,会重复循环,然后清除标志并忽略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()

资料来源:


“扫描仪使用定界符模式将其输入拆分为标记,默认情况下,定界符模式与空白相匹配。”

关键是扫描仪使用的定界符。默认情况下,\n不是唯一的分隔符,通常任何空格都是分隔符。调用scanner.next()不会跳到下一次,而是跳到下一个“令牌”。如果要忽略当前输入行并跳到下一行,请使用scanner.nextLine()

资料来源:


一个扫描仪使用一个分隔符模式将输入分成令牌,默认值与空白匹配。“

”,然后它清除标志,忽略100个单位,直到一个换行符。“无论如何,C++代码中已经出现了错误的行为。那么,为什么要将错误行为转移到java代码中呢?@πάνταῥεῖ 我总是乐于接受任何可能的建议和改进代码的方法。如果你有任何建议,请把我的方式扔给我,我欢迎任何我能得到的帮助。@ BraseMeta Malk暴风<代码>从C++到java的输入验证的有效代码< /C> >忘记C++存在,只需查找“java代码用于输入验证”。在java中尝试逐行模拟C++代码是错误的方法。同样的事情,反之亦然。你在问题a和@Zane回答的评论中提到了一条信息。你可能也应该发布产生这条信息的代码。我不明白,为什么这会获得接近票数的选票。这种方法可能不是最合理的,但它不是太宽,也不是主要基于意见。“然后它清除了标志,忽略了100个单位,直到一个换行符。”这在C++代码中已经是错误的行为。那么,为什么要将错误行为转移到java代码中呢?@πάνταῥεῖ 我总是乐于接受任何可能的建议和改进代码的方法。如果你有任何建议,请把我的方式扔给我,我欢迎任何我能得到的帮助。@ BraseMeta Malk暴风<代码>从C++到java的输入验证的有效代码< /C> >忘记C++存在,只需查找“java代码用于输入验证”。在java中尝试逐行模拟C++代码是错误的方法。同样的事情,反之亦然。你在问题a和@Zane回答的评论中提到了一条信息。你可能也应该发布产生这条信息的代码。我不明白,为什么这会获得接近票数的选票。该方法可能不是最合理的方法,但它既不太广泛,也不主要基于观点。我也尝试了nextLine(),但我不记得为什么输出中会出现错误。如果我记得的话,它是因为某种原因重复了两次“输入错误”的信息。我到家后再试一次,然后再打给你。谢谢你的建议。我也尝试了nextLine(),但我不记得为什么输出中会出现错误。如果我记得的话,它是因为某种原因重复了两次“输入错误”的信息。我到家后再试一次,然后再打给你。谢谢你的建议。