如何编写if / else语句来检查变量的类型

时间:2017-08-16 01:57:19

标签: java if-statement instanceof

我正在尝试编写一个程序,从标准输入读取两个数字,并查找它们是否为黄金比例,如果输入不是数字则打印错误消息。但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);
	}
 }
}

2 个答案:

答案 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);
        }