Vinnaren i pepparkakshustävlingen!
2008-03-01, 19:36
  #1
Medlem
Hej, har fått skoluppgift att sortera Djur på Namn och Art som ligger i en arraylist, här nedan är ett litet utdrag utav koden:


ArrayList<Djur> lista;

public UppgiftB() {
initiera();
buildGui();
skrivN();
lista = new ArrayList<Djur>();

}


public void initiera() {
hMap = new HashMap<String, Djur>();
hMap.put("Alf", new Djur("Alf", "Fiskmås", 27));
hMap.put("Björn", new Djur("Björn", "Noshörning", 21));
hMap.put("Charlie", new Djur("Charlie", "Enuk", 29));
hMap.put("Max", new Djur("Max", "Uggla", 74));
lista = new ArrayList<Djur>(hMap.values());
}

public void skrivN(){
SortN sN = new SortN();
Collections.sort(lista, sN);
Iterator<Djur> i = lista.iterator();
while(i.hasNext()){
Djur djur = i.next();
String namn = djur.getNamn();
}
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == avsluta) {
}
if (e.getSource() == info) {
textyta.setText(" Här har vi massor med spännande info ");
}
if (e.getSource() == listaNamn) {
SortN sN = new SortN();
textyta.setText(sN.toString());
}




Metoden skrivN() anropar en sorteringsklass SortN som fungerar jätte bra ifall ja vill prova sorteringen med hjälp utav: System.out.println(namn); i skrivN() metoden... men hur får ja min sortering att skrivas ut i min Textarea när ja väljer en knapp i menyn?


if (e.getSource() == listaNamn) {
SortN sN = new SortN();
textyta.setText(sN.toString());

vet inte riktigt vad jag gör för fel eller riktigt hur jag ska göra... någon som har något tips?
Citera
2008-03-02, 01:38
  #2
Medlem
Hazs avatar
Antingen kan du ju överskugga toString-metoden i SortN-klassen (och hur den ser ut vet ju inte jag) eller så kopierar du bara skrivN-metoden, alltså typ
Kod:
if (e.getSource() == listaNamn) {
   SortN sN = new SortN();
   textyta.setText("");
   Collections.sort(lista, sN);
   for (Djur d : lista)
      textyta.append(d.getNamn() + "\r");
}
Citera
2008-03-02, 11:47
  #3
Medlem
Tackar tackar, hur ska jag göra för att överskugga metoden?

public String toString(){
return namn + " " + art + " " + alder + " " + avMask;
}

SkrivN ser ut såhär:

import java.util.*;
import java.text.*;

public class SortN implements Comparator <Djur> {
private Collator col = Collator.getInstance();

public SortN() {
col.setStrength (Collator.PRIMARY);
}

public int compare(Djur o1, Djur o2) {
return col.compare(o1.getNamn(), o2.getNamn());
}


}
Citera
2008-03-02, 23:46
  #4
Medlem
Hazs avatar
SortN innehåller inte listan, så i så fall måste du på något sätt ge en referens till listan, exempelvis när du skapar en instans av klassen:
Kod:
SortN sN = new SortN(lista);
och bara använda referensen när toString anropas.
Det verkar dock väldigt flummigt, ska du nödvändigtvis använda toString direkt toill din TextArea så gör en subklass till ArrayList, typ
Kod:
public class DjurLista extends ArrayList<Djur> {
   public String toString() {
      String s = "";
      for (Djur d : this)
        s+=(d.getName() + "\r"); // Lägg till annat här, typ art, ålder etc.
      retrun s;
   }
}
Med massvis av reservationer för att det är sent, för att jag inte har Javas exakta syntax i huvudet just nu, samt för att jag är för lat för att kolla detaljerna.

Själv skulle jag överskugga toString i Djurklassen så den returnerar namn, art etc som du vill ha. Sedan skulle jag göra något liknande mitt första förslag, men det räcker ju då med
Kod:
textyta.append(d + "\r");
eftersom du inte behöver getName-metoden.
Citera
2008-03-03, 17:53
  #5
Medlem
Tackar, man bugar och bockar... tror jag förstår lite bättre nu =), det fungerar iaf
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback