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

#1楼 票数:0

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

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

这将检查双精度值的四舍五入值是否与双精度值相同。

您的变量可能具有int或double值,而Math.floor(a)始终具有int值,因此,如果您的变量等于Math.floor(a)则它必须具有int值。

如果变量的值是无穷大或负无穷大,那么这也不起作用,因此向条件添加“只要变量不是无穷大”。

#2楼 票数: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);
        }

  ask by translate from so

未解决问题?本站智能推荐:

4回复

if语句中的多个instanceof

我有一个if语句,其中包含多个instanceof检查。 例: 解决此if-else-query的更优雅的方法是什么?
1回复

代码的整个部分未激活。相信它可能与类型转换有关

我正在编写一些应该打印出适合标准的书籍列表的代码。 但问题是,代码到达检查和打印出匹配的循环开始的那些书。 然后跳过整个循环。 我测试了循环以查看它是否完全运行并且它似乎不是。 这是我得到的输出 教科书清单:零售书籍总和价格:0.00美元
2回复

如何检查参数类的类型?

我有以下方法: 调用方法: getServiceUri(MyClass.class); 在getServiceUri我想基于ServiceClass的类型调用WebService。 我知道equals将比较对象实例,但是在这种情况下,我试图发现对象的类型。 有人知道我可以使用这种
4回复

`instanceof`检查什么来确定对象类型?

我正在使用kryonet从服务器和客户端来回发送对象。 只要收到对象,就会运行一个侦听器。 它似乎决定对象实例的唯一方法是使用: 我想知道什么是instanceof检查以确定对象是否属于特定类型。 它检查类是否与所有代码完全相同,是否检查变量和名称? 它也检查导入的包吗? 你给我的
3回复

您如何检查异常的类型以及嵌套异常的类型?

假设我捕获了一个AppException类型的异常,但我只想对该异常执行某些操作,如果它有一个StreamException类型的嵌套异常。 如何检查嵌套的StreamException ?
2回复

从名称检查实例类型

我要这样做:从名称中获取类型,如果消息失败,则测试失败。 我想这是行不通的,因为clazz不是一种类型。 但是我该怎么办呢?
5回复

检查注释是否属于特定类型

我正在使用反射来查看附加到类的属性的注释是否是特定类型。 目前我在做: 这让我觉得有点笨拙,因为它依赖于一个完全限定的类名字符串。 如果命名空间将来发生更改,则可能会导致细微错误。 我想要做: 但是javax.validation.Valid是一个抽象类,无法实例化。 有没有办
6回复

检查消息类型时避免使用instanceof

我有以下情况,其中客户端类根据它接收的消息类型执行不同的行为。 我想知道是否有更好的方法,因为我不喜欢instanceof和if语句。 我想做的一件事是将方法拉出客户端类并将它们放入消息中。 我会在IMessage接口中放入一个类似process()的方法,然后将消息特定的行为放在每个具