2017-05-09 4 views
-2

Ich versuche, einen Code zu schreiben, um eine Datei mit Namen, E-Mails und Marken zu lesen, um Daten von der unteren Marke zu höheren Die Struktur der Datei ist Name, E-Mail, Marke Namen ; E-Mail; Zeichen ... Das Problem ist, dass ich Fehler mit dieser Linie erhalten 'note.get (j + 1) = note.get (j)' "unerwarteter Art gewünschten Variable gefunden Wert"lesen Sie eine Datei und sortieren Marken

hier ist mein Code richtig? Hilfe bitte

try { 
BufferedReader lineReader = new BufferedReader(new 
FileReader("C://wamp/www/text.txt")); 
String lineText = null; 
ArrayList<String> nom = new ArrayList<String>(); 
ArrayList<String> email= new ArrayList<String>(); 
ArrayList<Double> note = new ArrayList<Double>(); 
while ((lineText = lineReader.readLine()) != null) { 
String[] split = lineText.split(";"); 
nom.add(split[0]); 
email.add(split[1]); 
note.add(Double.parseDouble(split[2])); 
} 
double temp; 
String temps; 
for(int i=0;i<note.size();i++){ 
for(int j=0;j<note.size()-1-i;j++){ 
    if(note.get(j)> note.get(j+1)){ 
    temp=note.get(j); 
    note.get(j+1)=note.get(i); 
    note.get(i)=temp; 
     temps=nom.get(j); 
    nom.get(j+1)=nom.get(i); 
    nom.get(i)=temps; 
      temps=email.get(j); 
    email.get(j+1)=email.get(i); 
    email.get(i)=temps; 
    } 
    }  

    } 

    lineReader.close(); 
    } catch (IOException ex) { 
    System.err.println(ex); 
    } 
    } 
+0

formatieren Sie bitte Ihren Code neu – Jens

+0

Sie können dem Ergebnis einer Getter-Methode keinen Wert zuweisen. Ändere 'note.get (j + 1) = note.get (i);' zu 'note.set (j + 1, note.get (i));' und so weiter – Jens

+0

Verwende deine Daten in einer 'StudentMark' Klasse mit einem 'name',' email' und 'note' Feld. Lassen Sie die Schnittstelle 'Vergleichbar' implementieren. Lesen Sie alle Zeilen in Ihrer Datei und erstellen Sie ein neues 'StudentMark'-Objekt mit den Daten, die Sie pro Zeile lesen. Fügen Sie das zu einer Liste hinzu. Verwenden Sie 'Collections # sort', um Ihr Array zu sortieren. – nbokmans

Antwort

0

Es gibt eine einfache Möglichkeit, Ihre Liste zu sortieren. Zunächst einmal, eine neue Klasse erstellen, so dass Sie nom verknüpfen können, E-Mail, und beachten Sie alle zusammen:

public class Entry implements Comparable { 

    String nom; 
    String email; 
    double note; 

    public Entry(String nom, String email, Double note) { 
     this.nom = nom; 
     this.email = email; 
     this.note = note; 
    } 

    @Override 
    public int compareTo(Object o) { 
     if(!(o instanceof Entry)) throw new IllegalArgumentException("Wrong type!"); 

     Entry other = ((Entry) o); 

     if(this.note > other.note) return 1; 
     if(this.note == other.note) return 0; 
     return -1; 
    } 
} 

Sie können die Comparable-Schnittstelle implementieren, so dass Sie leicht sortieren integrierte Java-Methoden verwenden können, wie Sie wollen. Read more about this here.

dies tun, bevor Sie die Datei lesen:

ArrayList<Entry> entries = new ArrayList<>(); 

Und jede Zeile/Eintrag, den Sie gelesen (wahrscheinlich wollen Eingabevalidierung hinzugefügt werden):

Entry next = new Entry(split[0], split[1], Double.parseDouble(split[3])); 
entries.add(next); 

Dann, wenn Sie das Lesen fertig/Liste der Einträge erstellen, einfach das tun, es zu sortieren:

Collections.sort(entries); 

Ihre Liste jetzt von h sortiert werden higest-> niedrigste. Kehren Sie es um:

Collections.sort(entries, Collections.<Entry>reverseOrder()); 
+0

@Perston Garno danke für deine Antwort mein Code funktioniert gut, aber Ihre Methode ist besser organisiert Ich werde es versuchen :) –

+0

@maevabell kein Problem. Faustregel, erfinde das Rad nie neu, weil es wahrscheinlich eine einfache Lösung gibt, die in die Sprachstandard-Bibliothek eingebaut ist :) Aber es ist trotzdem eine gute Art zu lernen! (bezieht sich meistens auf Java) –

Verwandte Themen