对使用逻辑运算符感到困惑

时间:2013-01-18 01:19:04

标签: java

我有一个分配/项目来编写一个程序,显示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);
             }
        }
    }
}

3 个答案:

答案 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);
            }

}