1

次のコードを見てください。

class experiment{
    public static void main(String[] args) {
        int k = 3;

        while (k-- > 0) {
            System.out.println(k + "\n");
        }
    }
}

期待される出力:

2
1

実際の出力:

2
1
0

接尾辞演算子は、操作演算子よりも優先されます。したがって、k--の前に最初に評価する必要がありますk > 0が、出力を見ると、k > 0最初に評価されます。ここで簡単なものが恋しいですか?

4

3 に答える 3

1

うん、君のいうとおりだ。k--最初に評価されます。しかし、それは実際に評価されkます。そして、それを含む現在の操作が完了した後、その値は増加します。したがって、最初に現在の値が使用され、次に増分が発生します。

を使用--kした場合、期待どおりの出力が得られます。

これらの例を試してみてください、あなたは理解するでしょう:-

int k = 4;
System.out.println(k-- + " : " + k);  // prints 4 : 3

int x = 5;
System.out.println(--x + " : " + x);  // prints 4 : 4
于 2012-12-03T05:54:39.723 に答える
1

そうです、k--はの前に評価され> 0ます。ただし、その評価の結果はk、ではなくk - 1--後置であり、前置ではありません。

したがって、が最初に>評価されるときは、効果的3 > 0にです。これは、k現在はですが、2の結果はであるためです。ただし、印刷が行われるまでには、が最初に出力されます。これが、(私が推測する)予想よりも1回多くの反復を取得する理由です。 k--3k = 22

于 2012-12-03T05:54:46.817 に答える
1

優先順位はそれとは何の関係もありません。'k--'の値は'k'です。'k'をポストデクリメントすることには副作用がありますが、オペランド値には影響しません。

于 2012-12-03T06:04:30.493 に答える