我一直陷入无限循环java

时间:2012-10-14 22:42:59

标签: while-loop

我正在写一个战舰计划。现在我正在测试几行代码,看它是否会让船向上移动。如何设置我的程序是,例如,如果用户点击航空母舰按钮来设置他的航空母舰,该程序还应该设置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);
    }

有谁知道什么是错的或者我的问题有不同的解决方案?

3 个答案:

答案 0 :(得分:0)

如果aiclickcount == 5不是shiplength,则永远不会iffor放入nextInt(6) + 4循环中。你根本不需要第二个,你也不会突破它。只需按{{1}}生成大于3的数字。

答案 1 :(得分:0)

您的代码没有告诉我们变量shiplength的值。如果它为0,则永远不会输入for循环,因此aiclickcount将保持为0并且永远不会达到break语句(在aifirstclicki的随机值大于3的前提下)。 尝试使用调试器逐步执行代码,并让它显示变量的值,以便找出正在发生的事情。

答案 2 :(得分:0)

你的break;只会让你离开第二个while循环,而不是第一个循环,因为它只适用于它所属的最内层循环。

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