3
public class Test {
    public static void main(String... args) {

        int[][] arrayOfInts = {
            {23, 3, 65, 46},
            {65, 55, 2, 3},
            {55, 22, 35, 47}
        };
        int i, j, toFind = 2;

        boolean foundIt = false;

        search:
        for(i = 0; i < arrayOfInts.length; i++) {
            for(j = 0; j < arrayOfInts[i].length; j++) {
                if(arrayOfInts[i][j] == toFind) {
                    foundIt = true;
                    break search;
                }
            }
        }

        if(foundIt) 
            System.out.println("Element found at index " + i + ", " + j);
        else
            System.out.println("Element not found");
    }
}

SO 様、上記のコードのコンパイルに問題があります。整数変数 j を 0 ( j = 0) に初期化すると、コードは完璧に機能します。

しかし、私の質問は、Why should i initialize j = 0 ? なぜvariable j might not have been initialized行でエラー が発生するのですか

System.out.println("Element found at index " + i + ", "+ J);

私のint変数iが値を保存している場合、なぜ保存できないのjですか.. ??

PS Noobはこちら..!!

4

7 に答える 7

2

あなたが持っているかどうか想像してみてくださいarrayOfInts.length==0?

次に、ループに入ることはありません-> jが初期化されていません。

私の主張を証明するために、コンパイルして実行してみてください

int[][] arrayOfInts = {};
于 2013-05-31T11:16:53.907 に答える
1

j を初期化する内部ループが実行されることは想定されていないためです。ループの実行は条件付きであるため、外側のループ (i を含むループ) の条件が真ではない可能性があることに注意してください。その場合、j を初期化する行は決して実行されません。

于 2013-05-31T11:18:09.240 に答える
1

外側の for ループが実行インスタンスを実行する機会がないと仮定すると(配列の長さ = 0 の場合for(i = 0; i < arrayOfInts.length; i++) {は初めて false として)、 uninitializedのままになります。true の場合、if ブロックに出力する値がないため、エラーになります。 i < arrayOfInts.lengthjfoundItj

于 2013-05-31T11:18:12.670 に答える
1

arrayOfInts.length 0 になる可能性があるため、ループが実行されない可能性があります。その場合、変数jに値が割り当てられることはありません。

于 2013-05-31T11:17:04.083 に答える