如何读取可能是int或double的输入?

时间:2015-07-26 21:58:19

标签: java parsing integer double keyboard-input

我正在编写一个程序,我需要从键盘输入。我需要输入一个数字,但我不确定它是int还是double。这是我的代码(针对该特定部分):

import java.io.*;
import java.util.*;

//...
Scanner input  = new Scanner(System.in); 
int choice = input.nextInt();

我知道我可以获得String并执行parseInt()parseDouble(),但我不知道它会是哪一个。

4 个答案:

答案 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中执行代码,该代码会输出错误消息。