這裏有多種問題:
while (sorted = false)
套sorted
到false
,然後測試結果值false
,這意味着你永遠不會進入循環體在所有(不是你的問題一次)。
如果解決這個問題,你的代碼將只運行while
循環體一次(從而留下數組沒有排序還沒有),因爲你有sorted = true
作爲循環體結束的無條件聲明。
你需要有一個假設數組進行排序,然後,如果你發現任何證據被清除它不是,就像一個標誌:
public void sortArray()
{
boolean sorted;
do
{
sorted = true; // Assume it's sorted
int temp;
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
sorted = false; // We changed something, so assume we need to do another pass
}
}
}
while (!sorted);
}
附註:此只是一種風格的東西,但通常最好將變量的範圍儘量縮小。有沒有必要爲temp
是for
外循環或外連if
塊,移動它內的if
塊
public void sortArray()
{
boolean sorted;
do
{
sorted = true; // Assume it's sorted
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
int temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
sorted = false; // We changed something, so assume we need to do another pass
}
}
}
while (!sorted);
}
'='是賦值,''==是平等的。這就是爲什麼你應該總是寫'while(!sorted)'而不是。它可以保護你免受這種打字錯誤。 – azurefrog
*「但是我的for循環僅遍歷它一次。」*不,你當前的while循環根本不會執行循環體*,因爲azurefrog指出了上面的內容。如果你解決了這個問題,它將只運行一次**,因爲你在循環結束時無條件地設置了'sorted = true'。 –
@azurefrog感謝您指出這一點,我在我的實際代碼中實際上已將其作爲'==',但在此處輸入時將其搞亂。 – Bluasul