【问题标题】:How do I use Java's Scanner class to determine the datatype of my input?如何使用 Java 的 Scanner 类来确定输入的数据类型?
【发布时间】:2014-01-11 02:48:58
【问题描述】:

[对不起,如果这是一个愚蠢的问题,我在谷歌搜索时遇到了很多麻烦,并且找不到该问题的任何答案,即使它可能就像一个单行答案]

我只是在学习我的 Java 编程课程网站上的一些教程。

现在我正在编写一些代码,它会打开一个提示屏幕,就像“请输入一个介于 5 和 10 之间的整数:”,然后扫描数字,然后对一堆不同的变量类型执行此操作,不同边界等。

超级简单的东西。我只有一个小问题。

如何告诉我的扫描方法检查变量是否为 int 类型?我知道这可能很明显,但如果有人输入“A”或“1.543”,我应该让它显示,“这不是整数!”但我不知道如何实际使用扫描仪检查变量类型

【问题讨论】:

    标签: java java.util.scanner variable-types


    【解决方案1】:

    首先,因为您要进行验证,只需将输入作为字符串读取即可。

    String input = scanner.nextLine();
    

    然后你想检查它是否是一个数字。您可以使用 parse 方法,包裹在 try catch 中。

    try{
        int inputDbl = Integer.parseInt(input);
    }
    catch(NumberFormatException ex)
    {
        System.out.println("This is not a number");
    }
    

    如果您想在循环中执行此操作,请将 try catch 添加到返回 boolean..的方法中。

    public boolean isNumeric(String input)
    {
        try{
            double inputDbl = Integer.parseInt(input);
            return true;
        }
        catch(NumberFormatException ex)
        {
            return false;
        }
    }
    

    【讨论】:

    • hasNextInt() 不使用异常会更好吗?
    • 如果是 int 为什么要加倍?
    • 道歉纳乔克。错字。而hasNextInt() 仅在找到int 时才返回boolean。这样做可以进行更智能的验证,例如从double 输入中删除小数点,以便程序仍然可以继续。当我从用户那里获取输入时,我总是把它当作String,并尝试破译它是什么。
    【解决方案2】:

    您可以使用if(scanner.hasNextInt()){ ... } 来查看下一个是否有 int - 一般而言,某些字符序列可以被解析为不同类型的变量,因此您必须按照您想要的顺序使用每个 hasNextDouble() 等函数.

    查看here 获取完整文档,其中可能包含许多您正在寻找的有用功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2018-11-30
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多