确定重载方法的输入

时间:2011-06-24 19:46:10

标签: java java.util.scanner overloading

我在确定用户输入是int还是double时遇到了一些问题。

以下是一个示例:

public static int Square(int x)
{
    return x*x;
}

public static double Square(double x)
{
    return x*x;
}

我需要弄清楚如何根据扫描器确定输入是上述方法的int还是double。然而,由于这是我的第一个编程课程,我不允许使用任何未经教授的内容 - 在这种情况下,这是基础知识。

无论如何可能将输入作为字符串并检查是否存在'。'参与然后将其存储到int或double中?

最后,我不是要求你编程,而是帮助我想出一种解决方案。任何帮助表示赞赏:)

4 个答案:

答案 0 :(得分:2)

扫描程序有许多方法,如hasNextInthasNextDouble等,它们会告诉您“Scanner读取的下一个标记是否可以解释为(无论如何)”

答案 1 :(得分:1)

由于您提到您已了解the Scanner object,因此我假设您可以使用该类的方法供您使用。在这种情况下,您可以检测输入是整数,双精度,还是仅获取整行。您最感兴趣的方法是hasNextDouble()方法(返回boolean,指示Scanner中的当前令牌是否实际上是double。以及nextDouble()方法(如果Scanner中的下一个标记实际上是double,则将其从Scanner解析为一个)。这可能是从文件或标准输入确定输入类型的最佳方向。

另一种选择是使用包装类静态方法来转换值。这些通常命名为Integer.parseInt(str)Double.parseDouble(str),它们将给定的String对象转换为适当的基本类型。有关详细信息,请参阅Double类方法pasrseDouble(String s)。它可以这样使用:

String value = "123.45"
double convertedValue = 0.0;

try {
    convertedValue = Double.parseDouble(value);
} catch (NuberFormatException nfe) {
    System.err.println("Not a double");
}

此方法可能最适合应用程序中已存在且需要验证的值(为此目的在一个小Scanner上构建String会有点过分。)

最后,另一个潜在的(但不是非常干净,直截了当或可能是正确的技术)可以直接查看String对象并尝试查找它是否包含小数点,或者其他指示符是否为实际上是double。您可以使用indexOf(String substr)来确定它是否出现在String中。我怀疑这种方法有很多潜在的问题(例如,如果String有多个'。'字符会怎么样?)。我不会建议这条路线,因为它容易出错,很难遵循。但是,如果这是约束条件,那么它可能是一种选择。

所以,恕我直言,你的选择应该如下:

  1. 使用Scanner方法hasNextDouble()nextDouble()
  2. 使用包装类方法Double.parseDouble(String s)
  3. 使用String方法尝试识别该值(如果上述任一选项可用,请不惜一切代价避免使用此技术)。

答案 2 :(得分:1)

由于您认为不允许使用扫描仪方法,因此您尝试了许多替代方法。您提到检查字符串是否包含.。为此,您可以在String上使用contains方法。

"Some words".contains("or") // evaluates to true

这种方法的问题在于有许多字符串包含.但不是浮点数。例如,句子,URL和IP地址。但是,我怀疑你是讲师试图赶上你,并且可能会给你一些双打。

所以你可以尝试施法。将double转换为int会导致数字的小数部分被丢弃。

double doubleValue = 2.7;

int castedDoubleValue = (int) doubleValue; // evaluates to 2

double integerValue = 3.0;

int castedIntegerValue = (int) integerValue; // evaluates to 3

希望这应该足以让你开始编写问题的解决方案。

答案 3 :(得分:0)

可以像这样检查

            if(scanner.hasNextDouble()}
            {
               System.out.println("Is double");
            }


            if(scanner.hasNextDouble()}
            {
              System.out.println("Is double");
            }