这段代码还有更好的写法吗?

问题描述 投票:0回答:1

我是这方面的初学者,我很好奇我是否可以编写下面的代码 更有效率。 我不能使用循环或条件语句,只能使用逻辑运算符。

        double a = Double.parseDouble(args[0]);
        double b = Double.parseDouble(args[1]);
        double c = Double.parseDouble(args[2]);

        boolean check = a * a + b * b == c * c || a * a + c * c == b * b
                || b * b + c * c == a * a;
        StdOut.println(a > 0 && b > 0 && c > 0 && check);

我尝试了下面的代码,但有一个问题,即使值 (a,b,c) 为负数,它仍然会导致此命令行参数为 true:(-3 4 -5) 不知道为什么。

        double a = Double.parseDouble(args[0]);
        double b = Double.parseDouble(args[1]);
        double c = Double.parseDouble(args[2]);

        boolean check = a > 0 && b > 0 && c > 0 && a * a + b * b == c * c || a * a + c * c == b * b
                || b * b + c * c == a * a;
        StdOut.println(check);
java logical-operators boolean-logic coding-efficiency
1个回答
0
投票

由于运算符优先级,此表达式:

a > 0 && b > 0 && c > 0 && a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a

被视为:

(a > 0 && b > 0 && c > 0 && a * a + b * b == c * c) || (a * a + c * c == b * b) || (b * b + c * c == a * a)

所以它是三个条件的或。这不是您想要的分组,因此您必须手动添加括号。

a > 0 && b > 0 && c > 0 && (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
© www.soinside.com 2019 - 2024. All rights reserved.