1

6 または 7 で割り切れる 1 ~ 100 の整数を表示するプログラムを作成する割り当て/プロジェクトがありますが、両方は割り切れません。以下に書いた方法ではうまくいきません。私のブール値は、質問が求めているものに対して正しいですか?

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));

基本的に()、条件が両方に正しく適用されるように、否定する前に 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;

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 に答える