我正在尝试编写一个程序,从标准输入读取两个数字,并查找它们是否为黄金比例,如果输入不是数字则打印错误消息。但if / else与“instanceoff”无法正常工作,如果输入不是数字则会出现错误,即使它是黄金比例也不是。
由于
import java.util.Scanner;
public class GoldenRatio {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.print("Enter two numbers: ");
Double a = key.nextDouble();
Double b = key.nextDouble();
Double x;
Double y;
//Makes sure the bigger number becomes numerator
if(a <= b){
x= b;
y= a;
} else {
x = a;
y = b;
}
//Rounding decimal to 3 figures
Double left = (x+y)/x;
Double right = x/y;
String leftS = String.format("%.3f", left);
String rightS = String.format("%.3f", right);
Double leftD = Double.parseDouble(leftS);
Double rightD = Double.parseDouble(rightS);
// meant to make sure arguments are doubles
if (a instanceof Double && b instanceof Double) {
if (leftS == rightS) {
System.out.println("Golden ratio!");
} else {
System.out.println(leftS);
System.out.println(rightS);
System.out.println("Maybe next time");
System.exit(0);
}
}else {
System.out.println("Invalid input");
System.exit(0);
}
}
}
答案 0 :(得分:0)
这是因为你将A和B构成双打。
if ((a == Math.floor(a)) && !Double.isInfinite(a)) {
// integer type
}
检查double的向下舍入值是否与double相同。
你的变量可以有一个int或double值,Math.floor(a)
总是有一个int值,所以如果你的变量等于Math.floor(a)
那么它必须有一个int值。
如果变量的值是无穷大或负无穷大,那么这也是行不通的,因此只要变量不是无穷大的,就可以添加变量。条件。
答案 1 :(得分:0)
您应该检查给定对象是否属于Number
,然后检查Double
。检查下面检查“号码”。
if (a instanceof Number && a instanceof Double && b instanceof Double) {
if (leftS == rightS) {
System.out.println("Golden ratio!");
} else {
System.out.println(leftS);
System.out.println(rightS);
System.out.println("Maybe next time");
System.exit(0);
}
} else {
System.out.println("Invalid input");
System.exit(0);
}