webForumDet fria alternativet

Hämta info från textfil och sortera efter int

3 svar · 1 222 visningar · startad av Melea

MeleaMedlem sedan juli 20033 147 inlägg
#1

Hejsan

Blir snart tokig. Jag har en textfil som ser ut såhär:

Loafer,36,brown
Loafer,37,brown
Klacksko,70,white
Loafer,52,black

Jag vill hämta allt från textfilen, lägga dom i en ArrayList, sortera efter storlek och sen skriva ut i en jList.
Får det inte att fungera, blir tokig.

Såhär ser min GUI klass ut

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class GUI extends javax.swing.JFrame {

    ArrayList<Shoe> shoes = new ArrayList<Shoe>();

    public GUI() {
        initComponents();
    }

    public ArrayList getContent() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("shoe.txt"));
        String text;
        String[] splitText = null;
        while ((text = br.readLine()) != null) {
            splitText = text.split(",");
            shoes.add(new Shoe(splitText[0], Integer.parseInt(splitText[1]), splitText[2]));
        }
        return shoes;
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        try {
            jList1.setListData(getContent().toArray());
        } catch (IOException ex) {
            Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
        }
  
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new GUI().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JList jList1;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration                   
}

Och såhär ser min Shoe klass ut.

public class Shoe implements Comparator<String> {
    
    Collator myCollator = Collator.getInstance();
    private String type;
    private int size;
    private String color;
    
    public Shoe(String _type, int _size, String _color) {
        myCollator.setStrength(Collator.PRIMARY);
        type = _type;
        size = _size;
        color = _color;
    }
    
    public int compare(String a1, String a2) {
        return myCollator.compare(a1, a2);
    }
    
    @Override
    public String toString() {
        return type + " " + size + " " + color;
    }
    
}

Jag har som sagt helt ny på java, och detta är en övningstenta som vi har i plugget. Men jag kommer ingen vart. Hur ska jag sköta sorteringen? Testade med Arrays.sort() men det funkar tydligen inte på en ArrayList.

Stort tack på förhand!

SPiNMedlem sedan mars 20007 896 inlägg
#2

Kolla på Collections.sort(List, Comparator). Din sko-klass implementerar redan Comparator.

MeleaMedlem sedan juli 20033 147 inlägg
#3

Okej, suttit och pillat lite men får inte ihop det. Hur ska jag anropa Comparator från min sko-klass via GUI:t?
Ska jag sköta sorteringen via Collections.sort(List, Comparator) i getContent() metoden eller när jag anropar metoden med knappen?

MeleaMedlem sedan juli 20033 147 inlägg
#4

Lyckades lösa det genom att mublera om lite i Sko-klassen och använda Collections.sort som du tipsade om. Tack!

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)