2008-03-01, 19:36
  #1
Medlem
Hej, har ftt skoluppgift att sortera Djur p Namn och Art som ligger i en arraylist, hr 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", "Fiskms", 27));
hMap.put("Bjrn", new Djur("Bjrn", "Noshrning", 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(" Hr har vi massor med spnnande info ");
}
if (e.getSource() == listaNamn) {
SortN sN = new SortN();
textyta.setText(sN.toString());
}




Metoden skrivN() anropar en sorteringsklass SortN som fungerar jtte bra ifall ja vill prova sorteringen med hjlp utav: System.out.println(namn); i skrivN() metoden... men hur fr ja min sortering att skrivas ut i min Textarea nr ja vljer en knapp i menyn?


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

vet inte riktigt vad jag gr fr fel eller riktigt hur jag ska gra... ngon som har ngot 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 gra fr att verskugga metoden?

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

SkrivN ser ut shr:

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 innehller inte listan, s i s fall mste du p ngot stt ge en referens till listan, exempelvis nr du skapar en instans av klassen:
Kod:
SortN sN = new SortN(lista);
och bara anvnda referensen nr toString anropas.
Det verkar dock vldigt flummigt, ska du ndvndigtvis anvnda toString direkt toill din TextArea s gr 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"); // Lgg till annat hr, typ art, lder etc.
      retrun s;
   }
}
Med massvis av reservationer fr att det r sent, fr att jag inte har Javas exakta syntax i huvudet just nu, samt fr att jag r fr lat fr att kolla detaljerna.

Sjlv skulle jag verskugga toString i Djurklassen s den returnerar namn, art etc som du vill ha. Sedan skulle jag gra ngot liknande mitt frsta frslag, men det rcker ju d med
Kod:
textyta.append(d + "\r");
eftersom du inte behver getName-metoden.
Citera
2008-03-03, 17:53
  #5
Medlem
Tackar, man bugar och bockar... tror jag frstr lite bttre nu =), det fungerar iaf
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in