0

私は戦艦プログラムを書いています。現在、ボートが上方向に進むかどうかを確認するために、数行のコードをテストしています。私のプログラムの設定方法は、たとえば、ユーザーが空母ボタンをクリックして空母を設定した場合、プログラムは AI の空母も設定する必要があります。ボートは、tlba と呼ばれるボタン配列に配置されます。aifirstclicki はランダム ジェネレーターによって設定されるため、ランダムな行が選択されます。aifirstclickj はランダムな列を選択し、2 つの組み合わせでボタン配列 (10x10) 上のスポットを特定します。プログラムに outofboundsexception エラーが発生した場合、つまりプログラムが最初のスポットを選択した場合、最終的に outofbounds 例外エラーが発生するように、次のコードを作成しました。これは、for ループが aiclickcount = までスポットを追加し続けるためです。 5, 最初からやり直して、5 つのスポットすべてを配置できるスポットが見つかるまで、別のスポットを選択する必要があります。相変わらず無限ループにはまってます。

    int aiclickcount = 0;
    while (directiondecider == 0)
    {//up
        aifirstclicki = generator.nextInt(10);
        aifirstclickj = generator.nextInt(10);
        while (aifirstclicki != 3 &&
               aifirstclicki != 2 &&
               aifirstclicki != 1 &&
               aifirstclicki != 0)
        {
            for(int k=0; k<shiplength; k++)
            {
                tlba[aifirstclicki - k][aifirstclickj].setBackground(Color.RED);
                aistringarray[aifirstclicki - k][aifirstclickj] = "aircraftcarrier";
                aioccupied2d[aifirstclicki - k][aifirstclickj] = true;
                aiclickcount++;
            }

            if (aiclickcount == 5)
            {
                shipset = true;
                break;
            } 
        }
        System.out.println(shipset);
    }

誰かが何が間違っているのか、または私の問題に対する別の解決策を知っていますか?

4

3 に答える 3

0

5.ループに入れますaiclickcount == 5。2番目はまったく必要ありませんが、それから抜け出すこともありません。で 3 より大きい数値を生成するだけです。shiplengthiffornextInt(6) + 4

于 2012-10-14T22:51:00.560 に答える
0

あなたのコードは、変数 shiplength が持つ値を教えてくれません。0 の場合、for ループに入らないため、aiclickcount は 0 のままになり、break ステートメントに到達することはありません (aifirstclicki のランダム値が 3 より大きいという前提で)。デバッガーを使用してコードをステップ実行し、変数の値を表示して、何が起こっているかを確認してください。

于 2012-10-14T22:52:01.097 に答える
0

break;それが含まれている最も内側のループでのみ機能するため、最初のループではなく、2番目のwhileループから抜け出すだけです。

Java では、ループ条件を複雑にするのではなく、複数レベルのブレークを指定できます。 Java でネストされたループから抜け出す

于 2012-10-14T22:58:39.707 に答える