我是这方面的初学者,我很好奇我是否可以编写下面的代码 更有效率。 我不能使用循环或条件语句,只能使用逻辑运算符。
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);
由于运算符优先级,此表达式:
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)