0

私は配列を持っています

int[] arr = {9,20,-2,-45,23,5,1};

を使って並べ替えています

java.util.Arrays.sort(arr);

for ループ:

for(int i =0;(i<arr.length) && (arr[i] > 0) ; i++)

状態により動作しないようです(arr[i] > 0)。これがうまくいかない理由が思い浮かびませんでした。驚くべきことは、次のループが期待どおりに機能することです。

for(int i =0;(i<arr.length) && (arr[i] != 0) ; i++)

for(int i =0;(i<arr.length) && (arr[i] < 0) ; i++)
4

5 に答える 5

6

java.util.Arrays.sort(int[] arg);結果として、ソート後の最初の値 ( arr[0]) は -45 になります。for(int i =0;(i<arr.length) && (arr[i] > 0) ; i++)からの最初の反復では false になるためarr[0] == -45、 false になり(arr[0] > 0)ます。)

于 2013-01-04T19:32:38.160 に答える
2

配列をソートする-45と、 が最初の要素になるため、> 0チェックはすぐに と評価されfalseます。

一方、最初の 2 つの要素は に< 0評価され、配列全体は に評価されます。true!= 0true

于 2013-01-04T19:33:14.400 に答える
1

arr[0]が負であるため、最初のループは最初の項目の前で停止します。

ループで正の要素のみを取得する場合、正しい構文は次のとおりです。

    for (int i = 0; (i < arr.length) ; i++) {
        if (arr[i]> 0) {
            // Do stuff
        }
    }
于 2013-01-04T19:38:20.390 に答える
1

Arrays.sort()デフォルトでは、与えられた配列をその に従ってソートしますnatural order。それintは昇順を意味します。それを考えると、3つのループがどのように再生されるかは次のとおりです。

for (int i =0; (i<arr.length) && (arr[i] > 0); i++)

ループが初期化されるi=0と、arr[0] = -45. これは、チェックの 2 番目の条件に合格せず(arr[i] > 0)、ループは「スキップ」されます。

for (int i =0; (i<arr.length) && (arr[i] != 0); i++)

0配列には の値を持つ要素がないため、(arr[i] != 0)常に に評価されtrueます。邪魔にならないようにすると、ループは配列の長さに沿ってプラグインされます。

for (int i =0; (i<arr.length) && (arr[i] < 0); i++)

このループは、配列の最初の 2 つの要素arr[0] = -45arr[1] = -2. 最初のループと同じ理由。

総括する:

並べ替えられた配列全体を印刷したい場合、気にすることは、配列のどちらかの端を越えて実行されず、IndexOutOfBoundsException. から始めて0、 に到達するまで進みますarr.lengthのドキュメントも参照してくださいArrays.sort()

于 2013-01-04T19:44:23.437 に答える
1

本質的に、配列を並べ替えると、ループは実行されません。

arr[i] > 0最初に遭遇する要素が 0 より小さいため、条件は無効です。

arr[i] != 0配列に 0 がない限り、条件は実行されます。

条件arr[i] < 0は、最初の 2 つの要素に対してのみ実行されます。

于 2013-01-04T19:33:27.237 に答える