2011-11-19 189 views
1

我有一個類,我必須讓一個讀入一堆數據的程序把它放到幾個不同的數組中。然後我必須排序他們,但我的方法似乎不工作。排序並行陣列的故障

在我的第一個for循環內我有兩個if語句需要解決兩種情況。第一種情況是,如果隊名出現之前,第二種情況是隊名相同。如果球隊名稱相同,則按球場排序。

名稱排序工作正常,但是當我對第二條語句取消註釋時,它將它排序,我找不出來。

public static void sortDatabase(int numRecords, String[] teamArr, 
     int[] attemptsArr, int[] yardsArr, int[] winsArr, 
     int[] loseArr) 
{ 

    //Sort the database first according to name and then according to yards 
    System.out.println("Sort the database.\n"); 

    int iMin; 

    String teamTemp; 
    int attemptTemp; 
    int yardTemp; 
    int winsTemp; 
    int loseTemp; 

    for(int i = 0; i < numRecords - 1; i++) 
    { 
     iMin = i; 

     for(int k = i + 1; k < numRecords; k++) 
     { 
      int compare = teamArr[k].compareTo(teamArr[iMin]); 
      if(compare < 0) 
      { 
       iMin = k; 
      } 
      else if(compare == 0 && yardsArr[k] < yardsArr[iMin]) 
      {     
       iMin = k; 
      } 

      //swap out all data 
      teamTemp = teamArr[i]; 
      attemptTemp = attemptsArr[i]; 
      yardTemp = yardsArr[i]; 
      winsTemp = winsArr[i]; 
      loseTemp = loseArr[i]; 

      teamArr[i] = teamArr[iMin]; 
      attemptsArr[i] = attemptsArr[iMin]; 
      yardsArr[i] = yardsArr[iMin]; 
      winsArr[i] = winsArr[iMin]; 
      loseArr[i] = loseArr[iMin]; 

      teamArr[iMin] = teamTemp; 
      attemptsArr[iMin] = attemptTemp; 
      yardsArr[iMin] = yardTemp; 
      winsArr[iMin] = winsTemp; 
      loseArr[iMin] = loseTemp; 
     } 
    } 
} 

也不要評論或回答更好的方法來做到這一點,或說我應該做一個新的類來處理所有的數據。試着用我正在使用的排序方法來回答。我正在爲一堂課做這個,而且沒有什麼選擇。

回答

1

即標記//swap out all data需求的鑽頭 for循環,設置iMin,而不是之後來到。現在你在設置iMin的中間進行交換,並且這將導致iMin變得錯誤並且錯誤的元素被交換。

+0

我簡直不敢相信。我非常關注if語句。謝謝。 – Brandon

+0

不客氣! – ruakh