【问题标题】:How to write an if/else statement to check type of variable如何编写 if/else 语句来检查变量的类型
【发布时间】:2018-01-24 00:44:56
【问题描述】:

我正在尝试编写一个程序,该程序从标准输入中读取两个数字并确定它们是否处于黄金比例,如果输入不是数字则打印错误消息。但是带有“instanceoff”的 if/else 不能正常工作,如果输入不是数字,它就会出现错误,并且即使它是,它也不是黄金比例。

谢谢

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

【问题讨论】:

  • 你的代码是Double a那你为什么需要if (a instanceof Double
  • 请阅读How do I compare strings in Java? -- 并将if (leftS == rightS) 替换为if (leftS.equals(rightS))。另外ab 已经属于Double 类型,因此对它们进行instanceof 检查是没有意义的。
  • 请勿将Java 代码发布为HML/CSS/JavaScript sn-p...
  • 您的问题是捕捉输入是否为数字。我认为这一点是给出错误
  • 我需要执行 instanceof,因为其中一个要求是确保输入是数字字符,例如,如果用户只是键入“foo”和“bar”,那么它意味着打印无效输入.除非我使用错误的 instanceof 并且它意味着其他东西?

标签: java if-statement instanceof


【解决方案1】:

您应该检查给定对象是否属于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);
        }

【讨论】:

    【解决方案2】:

    这是因为您将 A 和 B 构造为 double。

    if ((a == Math.floor(a)) && !Double.isInfinite(a)) {
            // integer type
       }
    

    这会检查 double 的向下舍入值是否与 double 相同。

    您的变量可以有一个 int 或 double 值,而 Math.floor(a) 总是有一个 int 值,所以如果您的变量等于 Math.floor(a),那么它必须有一个 int 值。

    如果变量的值是无限或负无限,这也不起作用,因此在条件中添加“只要变量不是无限的”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2021-07-30
      相关资源
      最近更新 更多