2012-09-30 4 views
0

J'ai donc du mal à trouver comment mettre à jour une TextArea avec des informations que je soumets à partir d'une liste de génériques. A ce jour, le programme crée un nouvel ordre:Tri d'une ArrayList en Java

Order d1 = new Order(); 

Ensuite, l'utilisateur sélectionne des données et un bouton pousse ajouter, et l'ordre est ajouté à un TextArea. Le problème que j'ai est que je dois ajouter l'ordre au bon endroit dans la liste et le mettre à jour chaque fois. Je "m seulement le tri par un élément. Je ne suis pas sûr de savoir comment faire en utilisant la méthode CompareTo.

public void actionPerformed(ActionEvent event) 
{ 
    ArrayList<Drink> DrinkArray = new ArrayList<Drink>(); 

    if (event.getSource() == addcoffeeButton) 
    { 

     String coffeesize = (String) sizecoffeelist.getSelectedItem(); 
     double coffeeprice = Double.parseDouble(pricecoffeeTextfield.getText()); 

     String coffeetype = (String) cuptypecoffeelist.getSelectedItem(); 
     String coffeecaffeine = (String) caffeineList.getSelectedItem(); 
     String coffeeroom = (String) roomforcreamList.getSelectedItem(); 
     String coffeeadditional = additionalflavorList.getText(); 
     if ((coffeeadditional.isEmpty())) 
      coffeeadditional = "No Additional Flavor"; 

     Drink d1 = new Coffee(coffeesize, coffeeprice, coffeetype, coffeecaffeine, coffeeroom, coffeeadditional); 


      DrinkArray.add(d1); 
      orderTextArea.append(d1); 

Je dois ajouter la boisson au bon endroit avant de l'ajouter au tableau et l'impression à la zone de texte, mais je ne suis pas tout à fait sûr de savoir comment faire.

+2

Pouvez-vous élaborer? Vous n'avez pas beaucoup expliqué ... quel est le point * correct *? Comment le mettez-vous à jour "à chaque fois"? – oldrinb

+0

Une petite observation, généralement les commandes sont traitées en FIFO. Donc le concept de tri est étrange pour ce cas, jusqu'à ce que le client ne soit pas un VIP ou quelque chose comme ça. À côté de cela, vous devriez essayer de créer ceci plus orienté objet. D'abord remplacer les chaînes avec enum, la chaîne doit représenter la séquence de caractères non la logique métier de l'application. Après cela, vous devriez avoir une usine qui produit l'objet de café, alors tous ces paramètres ne seraient pas nécessaires si certains ordre ordinaire B ou WNS (White No Sugar) ;-). Je vous conseille de lire ce livre "Head First Design Patterns". –

Répondre

2

Je suppose que Drink implémente Comparable. Regardez les javadocs si vous ne savez pas ce que cela signifie.

Si c'est vrai, vous pouvez le faire:

List<Drink> drinks = new ArrayList<Drink>(); 
// add Drinks 
Collections.sort(drinks); // now they're sorted according to your Comparable. 

Vous pouvez également instancier un Comparator et le passer à la méthode tris.

Quelque chose comme ça (faire la fonction getValue() tout ce que vous voulez):

public class DrinkComparator implements Comparator<Drink> { 
    public int compare(Drink d1, Drink d2) { 
     if (d1.getValue() < d2.getValue()) { 
      return -1; 
     } else if (d1.getValue() > d2.getValue()) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 

    public boolean equals(Object obj) { 
     return this.compare(this, (Drink)obj) == 0; 
    } 
} 
+0

Je l'ai implémenté Comparable, mais je n'ai pas encore ignoré la méthode CompareTo, comment j'irais à ce sujet si un attribut est la longueur? –

+0

Une boisson a une longueur? J'aurais deviné que vous les classeriez par ordre alphabétique en fonction de leur nom, de leur teneur en alcool ou d'un autre attribut intrinsèque à une boisson. Qu'est-ce que la longueur a à voir avec quoi que ce soit? – duffymo

+0

Je suis en train de faire une variable, utilisons Size comme exemple.Je sais que je devrais créer une nouvelle méthode CompareTo qui comparerait toutes les tailles dans le tableau et les placerait dans un ordre spécifique, mais je ne sais pas comment faire cela. –

0

Vous devez essentiellement pré-déterminer le point d'insertion où l'on insère "objet" ...

Jetez un oeil à Collections.binarySearch(List<T>, T)

de la Java Docs

Retours:

l'index de la clé de recherche, s'il figure dans la liste; sinon, (- (point d'insertion) - 1). Le point d'insertion est défini comme le point auquel la clé serait insérée dans la liste: l'index du premier élément supérieur à la clé, ou list.size() si tous les éléments dans la liste sont inférieurs à la valeur spécifiée clé. Notez que ce garantit que la valeur de retour sera> = 0 si et seulement si la clé est trouvée.