# gemischtes Array sortieren (String, Integer, String)



## Horsten2 (16. Mrz 2010)

Hallo,

ich muss eine Textdatei einlesen, diese eingelesenen Werte sortieren und danach wieder in eine Textdatei ausgeben.
Die Ein- und Ausgabe funktioniert schon. Nur beim sortieren hab ich noch Probleme, weiß auch nicht so recht wie ich anfangen soll.

Die Textdatei hat folgenden Inhalt:
01.01.2010;2;Nordwind
02.01.2010;-2;Sturm-Nordost
03.01.2010;-6;Ostwind
04.01.2010;1;Westwind
05.01.2010;4;Windstille
06.01.2010;0;Nordwind
07.01.2010;-5;Ostwind
08.01.2010;-6;Nordwind
09.01.2010;-4;Windstille

Ich hab die Token schon getrennt, die Ausgabe ist also schon ohne das Semikolon.

hab jetzt folgenden Quelltext geschrieben:


```
public void einlesen_ActionPerformed(ActionEvent evt) {
  BufferedReader br;
  FileReader eStrom;
  String zeile;

  try{
  eStrom=new FileReader("Temperaturen.txt");
  br=new BufferedReader(eStrom);
  while ((zeile=br.readLine())!=null){
    StringTokenizer feld = new StringTokenizer(zeile,";");
    dateWerteString[i]=feld.nextToken();
    tempWerteString[i]=feld.nextToken();
    windWerteString[i]=feld.nextToken();
    tempWerteDouble[i]=Double.parseDouble(tempWerteString[i]);
    i++;
  } //Ende von While
  
  br.close();
  n=i;
  
  }//Ende von Try
  

  catch(IOException e){
    list1.add("Fehler beim Lesen der Datei");
  } //Ende von Catch
  
  ausgeben();
  }//Ende Button Einlesen
  
  private void ausgeben(){
    for (int i=1; i<n;i++){
      list1.add(dateWerteString[i]+" "+tempWerteString[i]+" "+windWerteString[i]);
    }
  }
```

Wie ist es möglich nun nach der Temperatur zu sortieren.


----------



## fastjack (16. Mrz 2010)

Mach Dir aus den CSV-Zeilen Objekte und füge diese in die Liste an. Der Comparator sollte helfen auf das Temperatur-Attribut sortieren.


----------



## Horsten2 (16. Mrz 2010)

So hab jetzt mal das hier geschrieben, aber hat noch nen Fehler bei dem ich die Ursache einfach nicht finde.:


```
public void sortieren_ActionPerformed(ActionEvent evt) {
    // Sortieren

    for (int i=1;i<n;i++){

       for (int j=n-1;j>=i;j--){
         if (tempWerteDouble[j-1]>tempWerteDouble[j]){
            int x=tempWerteDouble[j-1];
            tempWerteDouble[j-1]=tempWerteDouble[j];
            tempWerteDouble[j]=x;
         }
       }
    }
  }
```

Bei der Zeile zeigt er mir noch nen Fehler:

int x=tempWerteDouble[j-1];

Weiß jmd. woran das liegen könnte???


----------



## Final_Striker (16. Mrz 2010)

double-Wert in ein int casten. ;-)


----------



## Horsten2 (16. Mrz 2010)

Mhm und wie mache ich das? Bin Java Anfänger.^^


----------



## eRaaaa (16. Mrz 2010)

Anstatt [c]int x[/c] -- 
	
	
	
	





```
double x
```
  schreiben :lol:
---> Cast: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 2.5 Ausdrücke, Operanden und Operatoren


----------



## Horsten2 (16. Mrz 2010)

Ja sorry dass ich als Java Anfänger die Begriffe casten und Comparator nicht kenne.
Verstehe trotzdem nicht warum man hier im Forum gleich dafür ausgelacht wird. 

Echt soziale Community hier. -.-


----------



## fastjack (17. Mrz 2010)

Naja, es sind nicht alle so 

Hier findest Du eine nette deutsche Erklärung unter anderem zum Comparator.

Java Blog Buch : D) Objekte sortieren – Comparator und Comparable


----------

