我有一个分配/项目来编写一个程序,显示1到100之间的整数,可以被6或7整除,但不能两者都可以。它不像我在下面写的那样工作。我的布尔值是否正确问题是什么?
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);
}
}
}
}
答案 0 :(得分:4)
您应该执行以下操作
boolean year = ((n % 6 ==0) || (n % 7 ==0)) && !((n % 6 == 0) && ( n % 7 ==0));
在否定之前,基本上将()
内的两组条件分组,以便条件适用于两者。
为了使它更具可读性,你可以这样做..(虽然可能有点过分......)
boolean divisbleby6 = n%6 == 0;
boolean divisbleby7 = n%7 == 0;
boolean divisibleby6and7 = divisbleby6 && divisbleby7 ;
boolean year = (divisbleby6 || divisbleby7) && !divisibleby6and7 ;
或梅尔建议的聪明方法(可能难以一目了然),只有当一个但不是两个条件都成立时才返回true
。
boolean year = divisbleby6 != divisbleby7;
P.S。此外,正如user1333371建议的那样,您可能想要println(n);
答案 1 :(得分:3)
你可以简单地写下面的内容:
boolean year = (n % 6 == 0) != (n % 7 == 0)
答案 2 :(得分:0)
使用括号设置操作的顺序,并确保否定适用于6和7的模数检查。
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) {
System.out.println(n);
}
}