我在确定用户输入是int还是double时遇到了一些问题。
以下是一个示例:
public static int Square(int x)
{
return x*x;
}
public static double Square(double x)
{
return x*x;
}
我需要弄清楚如何根据扫描器确定输入是上述方法的int还是double。然而,由于这是我的第一个编程课程,我不允许使用任何未经教授的内容 - 在这种情况下,这是基础知识。
无论如何可能将输入作为字符串并检查是否存在'。'参与然后将其存储到int或double中?
最后,我不是要求你编程,而是帮助我想出一种解决方案。任何帮助表示赞赏:)
答案 0 :(得分:2)
扫描程序有许多方法,如hasNextInt
,hasNextDouble
等,它们会告诉您“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
有多个'。'字符会怎么样?)。我不会建议这条路线,因为它容易出错,很难遵循。但是,如果这是约束条件,那么它可能是一种选择。
所以,恕我直言,你的选择应该如下:
Scanner
方法hasNextDouble()
和nextDouble()
Double.parseDouble(String s)
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");
}