0

配列の数を 2 回変更しようとしていますが、[5][4] 配列内で 2 回だけ変更しようとしています。

つまり、最初の 2 つの要素だけを = 0 から =1 に変更して、ループを終了するとします。したがって、要素[0] = 1、[1] = 1、次に[2] = 0、[3] = 0です。次に、変更要素[2]と[3]を1に追加しますが、要素[0]は残しますand [1] = 1. (これは 1 次元配列の単なる例です)。

これは 5 行 2 列でしか機能しませんが、ループでこれを行うにはどうすればよいですか? たとえば、[30][6] 配列がある場合、これは明らかに効率的ではありません。forループでこれを理解しようとしましたが、うまくいく方法を思いつくことができません。

int numPassengers = 2;
int count = 0;

while (count < numPassengers){

        if(array[0][1] == 0){
            array[0][1] = 1;
            count++;
        }
        else if(array[1][1] == 0){
            array[1][1] = 1;
            count++;
        }
        else if(array[2][1] == 0){
            array[2][1] = 1;
            count++;
        }
        else if(array[3][1] == 0){
            array[3][1] = 1;
            count++;
        }
        else if(array[4][1] == 0){
            array[4][1] = 1;
            count++;
        }
    }

コードを少し変更しました。

for(int i = 0; i < ROW; i++){
        for(int j = 1; j <= 2 ; j++){

            if( array[i][j] == 0){

                if(count < numPassengers){
                    array[i][j]++;
                    count++;
                }
            }

        }
    }
4

1 に答える 1

0

2 次元配列の 0 である最初の 2 つの要素を見つけて、それらを 1 に変更したいということは理解しています。

要素を 1 つずつ参照するネストされた 2 つの for ループを作成するのは非常に簡単です。

for (int i=0; i<array.length; i++) {
    for (int j=0; j<array[i].length; j++) {
        int currentValue = array[i][j];
        // stuff
    }
}

(length配列のプロパティを使用すると、コードをジェネリックにするのに役立ちます)

次に、毎回currentValue0 と比較します。比較が真の場合、要素を 1 に変更します。

        if (currentValue == 0) {
            array[i][j] = 1;
        }

ただし、2 つの要素を変更したらすぐに停止する必要があります。そのためにcountは、コードのように変数を使用する必要があります。

        if (currentValue == 0) {
            array[i][j] = 1;
            count ++;
        }

count が に等しい場合numPassengers、2 つのループから抜け出す必要があります。ラベル付けされたbreakステートメントを使用してそれを行うことができます (単純なブレークでは内側のループから抜け出すだけです):

最初の前にfor:

outerloop:
for (int i=0; i<array.length; i++) {

その後count++

            count ++;
            if (count == numPassengers) {
                break outerloop;
            }
于 2013-02-21T19:10:24.813 に答える