0

我正在编写战舰程序。现在我正在测试几行代码,看看它是否会让船朝上行驶。我的程序是怎么设置的,比如用户点击航母按钮设置他的航母,程序也要设置ai的航母。这些船被放置在一个按钮阵列上,称为 tlba。aifirstclicki 由随机生成器设置,因此它将选择一个随机行。aifirstclickj 选择一个随机列,结合两者在按钮阵列(即 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

aiclickcount == 5如果你不是,你永远不会有shiplength5. 放入if你的for循环中。你根本不需要第二个,你也不需要摆脱它。只需生成大于 3 的数字nextInt(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;只会让你摆脱第二个 while 循环,而不是第一个循环,因为它只适用于它所属的最内层循环。

Java 允许您指定多级中断,而不必使循环条件复杂化: Breaking out of nested loops in Java

于 2012-10-14T22:58:39.707 回答