2011-11-19 4 views
1

J'ai une classe où je dois faire un programme qui lit dans un tas de données le place dans plusieurs tableaux différents. Je dois ensuite les trier mais ma méthode semble ne pas fonctionner.Tri des pannes en parallèle

À l'intérieur de ma première boucle for, j'ai les deux instructions if pour les deux situations auxquelles je devrais m'adresser. La première situation serait si le nom de l'équipe vient avant et le second est quand le nom de l'équipe est le même. Si le nom de l'équipe est le même, il trie par yards. Le tri par nom fonctionne bien, mais quand je ne commente pas la deuxième déclaration, je la classe dans un ordre que je n'arrive pas à comprendre.

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; 
     } 
    } 
} 

Aussi, ne pas faire de commentaires ou de répondre à de meilleures façons de le faire ou dire que je devrais faire une nouvelle classe pour gérer toutes les données. Essayez simplement de répondre avec la méthode de tri que j'utilise. Je fais ceci pour une classe et ai peu d'options.

Répondre

1

Le bit qui est étiqueté //swap out all data doit venir après la boucle for qui définit iMin, plutôt que l'intérieur elle. En ce moment vous faites des swaps au milieu du réglage iMin, et cela causera iMin à se tromper et les mauvais éléments à échanger.

+0

Je ne peux pas croire que c'était ça. J'étais tellement concentré sur les déclarations if. Je vous remercie. – Brandon

+0

De rien! – ruakh