这是我的第一个问题)希望有人可以提供帮助:
我正在尝试编写下一个程序: 所以我有1输入和最大2输出 首先,我正在检查输入是否为(int!) 如果为TRUE我打印出消息"是它是整数"并显示"保存的数字在变量int",
但是如果我放双,我想打印出消息=("不是它不是INT)+ 并以双重格式显示!
当我把int放入时,一切都很好但是当我把它加倍时它是不正确的。
public class Scan {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int check;
System.out.println("Your number? ");
if(sc.hasNextInt()){
check=sc.nextInt();
System.out.println("OKEI "+check+ " IT IS INTEGER! ");}
else if(sc.hasNextDouble()){
check=sc.nextDouble();
System.out.println("Nooo " + check + " NO it is not INT");
}
}
}
答案 0 :(得分:2)
一种解决方案是将check
替换为double
,并将检查更改为:
if (check == Math.floor(check))
在您的解决方案中,您尝试将double
分配给int
。由于它不合适,它会失去精度并被截断。
最终解决方案应如下所示:
Scanner sc = new Scanner(System.in);
check = sc.nextDouble();
if (check == Math.floor(check)) {
// an "int"
} else {
// not integer
}
答案 1 :(得分:2)
创建一个新的double变量并将sc.nextDouble()指定给该双变量。
实施例: double checkDouble; ....
else if(sc.hasNextDouble()){
checkDouble=sc.nextDouble();
System.out.println("Nooo " + check + " NO it is not INT");
}
答案 2 :(得分:1)
在Eclipse中尝试代码时,使用check = sc.nextDouble()
(check
为int
)时出错,您可以这样修复:
public static void main(final String[] args) {
System.out.println("Your number? ");
final Scanner sc = new Scanner(System.in);
if (sc.hasNextInt()) {
final int check = sc.nextInt();
System.out.println("OKEI " + check + " IT IS INTEGER! ");
} else if (sc.hasNextDouble()) {
final double check = sc.nextDouble();
System.out.println("Nooo " + check + " NO it is not INT");
} else {
System.out.println("Failed.");
}
}
这样,您不会使用Math.floor
或演员表丢失任何小数部分。
答案 3 :(得分:0)
将int转换为double值,这可能会有所帮助。
else if (sc.hasNextDouble()) {
check = (int) sc.nextDouble();
System.out.println("Nooo " + check + " NO it is not INT");
}