我正在编写一个程序,我需要从键盘输入。我需要输入一个数字,但我不确定它是int
还是double
。这是我的代码(针对该特定部分):
import java.io.*;
import java.util.*;
//...
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
我知道我可以获得String
并执行parseInt()
或parseDouble()
,但我不知道它会是哪一个。
答案 0 :(得分:5)
嗯,整数也是双倍的,所以如果你认为一切都是双重的,那么你的逻辑就可以了。像这样:
import java.io.*;
import java.util.*;
Scanner input = new Scanner(System.in);
double choice = input.nextDouble();
如果您因任何原因需要输入为整数,它只会变得复杂。然后,用于测试int的parseInt()就可以了。
答案 1 :(得分:3)
只要使用double
,无论它是什么。使用double作为整数值时,没有明显的损失。
Scanner input = new Scanner(System.in);
double choice = input.nextDouble();
然后,如果你需要知道你是否得到了双倍,你可以使用Math.floor
进行检查:
if (choice == Math.floor(choice)) {
int choiceInt = (int) choice);
// treat it as an int
}
不要混淆catch
NumberFormatException
,不要搜索字符串一段时间(这可能甚至不正确,例如,如果输入是1e-3
它是一个double(0.001
)但没有句点。只需将其解析为double
然后继续。
此外,请不要忘记nextInt()
和nextDouble()
do not capture the newline, so you need to capture it with a nextLine()
after using them.
答案 2 :(得分:0)
您可以尝试使用floor函数来检查它是否为double。如果您不知道,地板功能基本上会切断任何十进制数字。所以你可以比较有和没有小数的数字。如果它们是相同的,那么这个数字可以被视为一个整数,否则就是一个双数(假设你不需要担心长数这样的大数字)。
String choice = input.nextLine();
if (Double.parseDouble(choice) == Math.floor(Double.parseDouble(choice)) {
//choice is an int
} else {
//choice is a double
}
答案 3 :(得分:0)
我要做的是获取String
输入,并将其解析为double或整数。
String str = input.next();
int i = 0;
double d = 0d;
boolean isInt = false, isDouble = false;
try {
// If the below method call doesn't throw an exception, we know that it's a valid integer
i = Integer.parseInt(str);
isInt = true
}catch(NumberFormatException e){
try {
// It wasn't in the right format for an integer, so let's try parsing it as a double
d = Double.parseDouble(str);
isDouble = true;
}catch(NumberFormatException e){
// An error was thrown when parsing it as a double, so it's neither an int or double
System.out.println(str + " is neither an int or a double");
}
}
// isInt and isDouble now store whether or not the input was an int or a double
// Both will be false if it wasn't a valid int or double
通过这种方式,您可以通过解析double(双精度值具有与整数不同的可能值范围)来确保不会丢失整数精度,并且可以处理既未输入有效整数或双精度的情况
如果try
块内的代码抛出异常,则执行catch块中的代码。在我们的例子中,如果parseInt()
方法抛出异常,我们执行catch块中的代码,其中第二个try-block是。如果parseDouble()
方法抛出异常,那么我们在第二个catch-block中执行代码,该代码会输出错误消息。