<分区>
我有一个作业/项目要编写一个程序来显示 1 到 100 之间的整数,这些整数可以被 6 或 7 整除,但不能同时被两者整除。它不像我在下面写的那样工作。我的 boolean 值对于问题的要求是否正确?
import acm program.*;
public class SixAndSeven extends ConsoleProgram {
public void run() {
for (int n = 1; n < 100; n++) {
boolean year = (n % 6 ==0) ||
(n % 7 ==0) &&
!(n % 6 == 0) &&
( n % 7 ==0);
if (year) {
println(year);
}
}
}
}
你应该做下面的事情
boolean year = ((n % 6 ==0) || (n % 7 ==0)) && !((n % 6 == 0) && ( n % 7 ==0));
基本上在取反之前将 2 组条件分组到 ()
中,以便条件正确地应用于两者。
为了使其更具可读性,您可以这样做..(尽管可能矫枉过正..)
boolean divisbleby6 = n%6 == 0;
boolean divisbleby7 = n%7 == 0;
boolean divisibleby6and7 = divisbleby6 && divisbleby7 ;
boolean year = (divisbleby6 || divisbleby7) && !divisibleby6and7 ;
或 Mel 建议的聪明方法(乍一看可能更难理解),它仅在一个条件而非两个条件都为真时返回 true
。
boolean year = divisbleby6 != divisbleby7;
附言此外,正如 user1333371 所建议的,您可能想要执行 println(n);