2 回答
TA贡献1802条经验 获得超5个赞
发生这种情况是因为您的 break 语句只中断了内循环,而不是外循环,对于每个循环,您都需要一个 break 语句来退出循环,但在您的情况下,这不是必需的并且是脏的。但出于学习目的,我将向您证明:
public static int seatAvailable(int [][] x, int y [][], int z)
{
boolean found = false;
int seat = 0;
while (!found)
{
for (int i = 0; i < x.length; i++)
{
for (int j = 0; j < x[0].length; j++)
{
if (z == x[i][j])
{
found = true;
x[i][j] = 0;
seat = y[i][j];
break;
}
}
if (found) break;
}
}
return seat;
}
现在这将按您的预期工作,当函数找到第一个匹配项时,首先内部循环将被破坏,第二个 if 语句将破坏外部 for 循环。
问题是您可以使用 return 语句立即循环并返回找到的座位,这样您就不需要任何 break 语句。这个解决方案也使得第一个 while 循环毫无意义,因为两个 for 循环就足够了。
希望这可以帮助!
TA贡献1853条经验 获得超18个赞
break 语句将跳出最内层的循环(对于 j)。您假设它脱离了外部 for 循环(for i)。
这是更简洁的解决方案,它消除了不必要的 while 循环和 break 语句。
注意:在您的代码中,您有j <= x[0].length. 我觉得应该是j <= x[i].length?
public static int seatAvailable(int [][] x, int y [][], int z)
{
int seat = 0;
for (int i = 0; i < x.length; i++)
{
for (int j = 0; j < x[i].length; j++)
{
if (z == x[i][j])
{
x[i][j] = 0;
seat = y[i][j];
return seat;
}
}
}
return seat;
}
添加回答
举报