2011-11-11 8 views
1

Débutant en Java en utilisant un ancien manuel et Tête d'abord: Java livres pour comprendre quelques trucs.Tri des tableaux parallèles

J'ai trois tableaux tous parallèles. Je dois être en mesure de trier par titre, auteur ou nombre de pages en fonction de la sélection de l'utilisateur. Je peux en trier un en utilisant Arrays.sort() mais je me suis accroché sur la façon de trier les deux autres tableaux pour correspondre à la nouvelle triée. Dites je trier le tableau BookTitle, mais je vais avoir besoin d'afficher l'auteur et le nombre de pages de ses tableaux respectifs et je suis perplexe.

do 
{ 
    entry = JOptionPane.showInputDialog(null, 
             "Enter your sort preference: \n" + 
             "T = Sort by TITLE\n" + 
             "A = Sort by AUTHOR\n" + 
             "P = Sort by PAGE Count"); 

    c = entry.charAt(0); 

    switch (c) 
    { 
    case 't': 
    case 'T': 
     Arrays.sort(BookTitle); 
     for (int x = 0; x < BookTitle.length; x++) 
     { 
      msg += ("Title: " + BookTitle[x] + "\n"); 
     } 
     JOptionPane.showMessageDialog(null, msg); 
     isValid = true; 
     break; 

    case 'a': 
    case 'A': 
     isValid = true; 
     break; 

    case 'p': 
    case 'P': 
     isValid = true; 
     break; 

    default: 
     JOptionPane.showMessageDialog(null, "Invalid entry"); 
     break; 
    } 
} while (isValid == false); 
+3

Doivent-ils être parallèles? Parce que la meilleure façon de le faire est d'avoir 1 tableau d'objets, où chaque objet contient le titre, l'auteur et le nombre de pages. – VoidStar

+1

Mettez-les tous dans une classe. Triez le tableau des objets de cette classe. Ou quelque chose comme ça; Je ne connais pas Java. Voir http://stackoverflow.com/questions/4018090/sorting-listclass-by-one-of-its-variable –

Répondre

1

Adapté de ce poste par @ScottStanchfield: sorting List<Class> by one of its variable

public class Book { 
    String author; 
    String title; 
    String pages; 
} 

Collections.sort(list, new Comparator<Book>() { 
    public int compare(Book c1, Book c2) { 
     if (c1.pages > c2.pages) 
      return -1; 
     if (c1.pages < c2.pages) 
      return 1; 
     return 0; 
    } 
}); 

Book[] books; 
Collections.sort(books); 

Je ne sais pas Java, donc si vous voyez des erreurs, s'il vous plaît les corriger!

0

Première option est comme ci-dessus, les mandrin dans une classe et le rendre comparable comme Why should a Java class implement comparable?. Cela ne vous permet que de comparer sur une seule valeur, je pense qu'il existe un moyen de choisir quoi trier, mais pas que je sache. L'autre façon ... consiste à implémenter votre propre méthode de tri. Cela peut être un peu de travail, mais il est probablement bon de le faire au moins une fois pour que vous puissiez l'apprendre. L'insertion et le tri par sélection sont assez faciles à maîtriser, et la volonté vous permet de déplacer des éléments dans chaque tableau en parallèle. MISE À JOUR: Comme ci-dessus, vous pouvez avoir plusieurs compartiments, consultez le site Web this car il semble avoir tout ce dont vous avez besoin.

+0

Le lien O'Reilly est mort. –

1

Vous pouvez créer une classe avec les trois attributs Auteur, Titre, Pages. Et puis vous pouvez créer 3 comparateurs qui se comparent en termes d'auteur, titre et pages indépendamment. Et puis vous pouvez prendre l'entrée de l'utilisateur T, A, P comme ce que vous faites acheter, vous devez trier le tableau avec les comparateurs correspondants. pseudo-code serait comme:

Case A : 
    Arrays.sort(ComparatorA); 

case T: 
    Arrays.sort(ComparatorT); 

case P: 
    Arrays.sort(ComparatorP); 
1
public class SortUtils { 
    public static void sort(long[] x, long[] y) { 
     for (int i = 0; i < x.length; i++) { 
      for (int j = i; j > 0 && x[j - 1] > x[j]; j--) { 
       swap(x, j, j - 1); 
       swap(y, j, j - 1); 
      } 
     } 
    } 

    private static void swap(long anArray[], int a, int b) { 
     long t = anArray[a]; 
     anArray[a] = anArray[b]; 
     anArray[b] = t; 
    } 
} 
+0

C'est généralement une mauvaise idée d'implémenter le tri des bulles, mais cela semble particulièrement vrai lorsqu'on travaille dans un langage qui a des algorithmes de tri intégrés (par exemple 'Arrays.sort') ... –