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;
}
添加回答
舉報