1

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

3 回答 3

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 ;

或者 Mel 建议的聪明方法(可能一目了然更难理解),它true仅在一个但不是两个条件都为真时返回。

boolean year = divisbleby6 != divisbleby7;

PS 此外,正如 user1333371 建议的那样,您可能想要这样做println(n);

于 2013-01-18T01:20:59.610 回答
3

你可以简单地写如下:

boolean year = (n % 6 == 0) != (n % 7 == 0)
于 2013-01-18T01:29:05.393 回答
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);
            }

}
于 2013-01-18T01:25:21.220 回答