0

この特定のメソッドの出力を見ると、私は混乱します。私はそれが何をしているのかを正確に理解しようとしています。

これは方法です:

for (int i = 0; i < 4; i ++) {
    for (int j = 0; j < 9; j++) {
    if (j==5) {
        break;
    }
    if ((j==0) || (i==0)) {
        continue;
    }
    if (!((j*i % 3) != 0)) {
    System.out.println(j*i);
    }
}

}

出力が何であるかは知っていますが、それがどのように機能しているのかまだわかりません。そのため、ここで質問しています。したがって、このメソッドは j が 5 に達するまで通過し、その後中断します。

次に i をインクリメントします。j は 0 です。J != 5 なので壊れません。j == 0 なので続けます。しかし、J は 3 になり、I は 1 です。ここで迷っています。3はどこから来たの??

これを使用して、舞台裏で何が起こっているかを印刷していました

    public static void tester() {
    for (int i = 0; i < 4; i ++) {
        for (int j = 0; j < 9; j++) {
            if (j==5) {
                System.out.println("j == 5, breaking");
                break;
            }
            if ((j==0) || (i==0)) {
                System.out.println("J is " + j);
                System.out.println("I is " + i);
                System.out.println("j or i == 0, continuing");
                continue;
            }
            if (!((j*i % 3) != 0)) {
                System.out.println("J is " + j);
                System.out.println("I is " + i);
                System.out.println(j*i);
            }
        }
        System.out.println();
    }
}

出力は次のとおりです。

J is 0

I is 0

j or i == 0, continuing

J is 1

I is 0

j or i == 0, continuing

J is 2

I is 0

j or i == 0, continuing

J is 3

I is 0

j or i == 0, continuing

J is 4

I is 0

j or i == 0, continuing

j == 5, breaking


J is 0

I is 1

j or i == 0, continuing

J is 3

I is 1

3

j == 5, breaking


J is 0

I is 2

j or i == 0, continuing

J is 3

I is 2

6

j == 5, breaking


J is 0

I is 3


j or i == 0, continuing

J is 1

I is 3

3

J is 2

I is 3

6

J is 3

I is 3

9

J is 4

I is 3

12

j == 5, breaking
4

3 に答える 3

1

j=2 かつ i=1 の場合、!((j*i % 3) != 0)false を返すため、その状態にはならず (他にもありません)、出力はありません。そのため、j=2 を飛び越えているように見えます。j==2 の場合に追加するSystem.out.println()と、それが表示されます。

于 2012-05-08T13:49:18.990 に答える
1

3および後で、6)は、このコードから発生しています...

        if (!((j*i % 3) != 0)) {
            System.out.println("J is " + j);
            System.out.println("I is " + i);
            System.out.println(j*i);
        }

事実上、が の残りを持っている!((j*i % 3) != 0)場合、このステートメント内でコードを実行します。つまり、が( , , , )の倍数である場合は常にこのコードを実行します。j*i/30ififj*i336912

ロジックがわかりにくい - このように書いたほうがいいだろう...

        if ((j*i % 3) == 0) {
            System.out.println("J is " + j);
            System.out.println("I is " + i);
            System.out.println(j*i);
        }

元の方法では、すべての!記号と複数の括弧/中括弧が読みにくくなっています。

于 2012-05-08T13:50:23.343 に答える
1

次の出力が にi=1 j = 3ある理由は、 forj=2j=1の 3 つすべてifsが false であるためです。

あなたが持っている

  1. j=1 i=1
  2. 1*1 % 3これは1
  3. 1 != 0これはtrue
  4. !(true)これはfalse

  1. j=2 i=1
  2. 2*1 % 3これは2
  3. 2 != 0これはtrue
  4. !(true)これはfalse

最後に

  1. j=3 i=1
  2. 3*1 % 3これは0
  3. 0 != 0これはfalse
  4. !(false)これはtrue

だからあなたは答えを印刷します

あなたがすべてを見たいなら、私は移動します

System.out.println("J is " + j); 
System.out.println("I is " + i);

その方法の外ではifs、ループの反復ごとに出力されます

于 2012-05-08T13:51:06.807 に答える