2016-11-01 129 views
0

我正在嘗試使用此方法按升序對整數數組進行排序。但我的for循環僅遍歷一次。Java- Sorting int array

public void sortArray() 
{ 
    boolean sorted = false; 

    while(sorted == false) 
    { 
     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 = true; 
    } 
} 

我知道它與我如何處理布爾標誌有關,但我不知道如何去解決它。任何建議,將不勝感激。提前致謝。

+1

'='是賦值,''==是平等的。這就是爲什麼你應該總是寫'while(!sorted)'而不是。它可以保護你免受這種打字錯誤。 – azurefrog

+1

*「但是我的for循環僅遍歷它一次。」*不,你當前的while循環根本不會執行循環體*,因爲azurefrog指出了上面的內容。如果你解決了這個問題,它將只運行一次**,因爲你在循環結束時無條件地設置了'sorted = true'。 –

+0

@azurefrog感謝您指出這一點,我在我的實際代碼中實際上已將其作爲'==',但在此處輸入時將其搞亂。 – Bluasul

回答

3

這裏有多種問題:

  1. while (sorted = false)sortedfalse,然後測試結果值false,這意味着你永遠不會進入循環體在所有(不是你的問題一次)。

  2. 如果解決這個問題,你的代碼將只運行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); 
} 

附註:此只是一種風格的東西,但通常最好將變量的範圍儘量縮小。有沒有必要爲tempfor外循環或外連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); 
} 
3

您目前正在循環結束時將您的排序設置爲true。當然,如果實際上沒有重新洗牌,那應該是真的。到archieve這個

一種方法是將一組分類爲true,在while循環的開始,並將其設置爲false,如果您發現該陣列還沒有排序,你做元件的切換:

public void sortArray() 
{ 
    boolean sorted = false; 

    while(!sorted) 
    { 
     sorted = true; 
     int temp; 
     for(int i = 0; i < inArray.length - 1; i++) 
     { 
      if(inArray[i] > inArray[i + 1]) 
      { 
      sorted = false; // array is not yet sorted 
      temp = inArray[i]; 
      inArray[i] = inArray[i + 1]; 
      anArray[i + 1] = temp; 
      } 
     } 

    } 
}