我正在写一个战舰计划。现在我正在测试几行代码,看它是否会让船向上移动。如何设置我的程序是,例如,如果用户点击航空母舰按钮来设置他的航空母舰,该程序还应该设置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);
}
有谁知道什么是错的或者我的问题有不同的解决方案?
答案 0 :(得分:0)
如果aiclickcount == 5
不是shiplength
,则永远不会if
将for
放入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