# Strings sortieren



## walter911 (11. Dez 2009)

Hallo,

ich habe 3 Bücher. Ein Buch setzt sich  zusammen aus Titel, Autor, ISBN und Preis.

dann soll durch einen inputdialog eingebgeben werden wonach sortiert werden soll. 1 für Titel, 2 für Autor, 3 für ISBN und 4 für Preis.

danach soll durch einen inputdialog eingegeben wonach sortiert werden soll. 1 für aufsteigend und 2 für absteigend.

Wie kann ich das am besten lösen?

Buch1.titel
Buch1.autor
Buch1.isbn
Buch1.preis
sind die Variablen. Bei den anderen beiden Büchern steht anstatt der 1 halt eine 2 bzw. 3

Der erste input Dialog gibt ja Werte von 1-4 zurück. 
Das ich da if derersteinputdialog.equals("1") ... machn könnte weiß ich noch aber ich hab keine Ahnung wie ich das jetzt sortieren kann.


----------



## SlaterB (11. Dez 2009)

siehe auch
http://www.java-forum.org/java-basics-anfaenger-themen/92971-anfaenger-problem-sortieren.html

insbesondere auch den von dort verlinken Thread wobei die Lehrbuch-Lösung mit Comparable besser ist


----------



## walter911 (11. Dez 2009)

Danke. Ich hab mir das jetzt mal genauer angeschaut und glaube auch, dass auf der seite java blog buch im Prinzip der Lösungsweg steht. Ich weiß aber immernoch nicht genau wie ich das jetzt für mein Beispiel verwenden kann


----------



## walter911 (12. Dez 2009)

Hallo,
kann mir niemand genauer sagen was ich machen muss?

Ich bekomme es mittlerweile hin ein array zu erstellen und zu sortieren:

```
long[] liste3 = new long[]{Buch1.isbn, Buch2.isbn, Buch3.isbn};
Arrays.sort(liste3);
System.out.println(liste3);
```
allerdings bringt mir das ja nichts weil ich ja eine komplette Ausgabe brauche. Also buch1.name usw...


----------



## Spacerat (12. Dez 2009)

Bei mehreren Sortierkriterien eignet sich Comparable eigentlich gar nicht, da dieses Interface innerhalb der zu vergleichenden Objekte plaziert werden muss, wodurch man keine Suchkriterien mehr ändern kann. Besser ist es, pro Sortierkriterium einen Comparator zu kreieren, eine Collection aller Buch-Instanzen (z.B. [c]List<Book>[/c]) zu erstellen und diese dann mit einem der kreierten Comparatoren zu sortieren:
	
	
	
	





```
Collections.sort(list, ISBNComparator);
Collections.sort(list, TitleComparator);
Collections.sort(list, AuthorComparator);
Collections.sort(list, PriceComparator);
```
Wenn die Klasse Buch dann auch noch [c]toString()[/c] überschreibt kann sie bequem wie folgt ausgegeben werden
	
	
	
	





```
for(Book b : list) {
  System.out.println(b.toString());
}
```


----------



## walter911 (12. Dez 2009)

ich bekomme das so noch nicht hin.
Ich kann es aber etwas vereinfachen. 
Laut Aufgabenstellung muss bei der Sortierung nur der Name des Buchs angegeben werden.


für den Fall das man nach titel sortieren soll ist es ja sehr einfach:

```
String[] buchtitelarray = new String[] {Buch1.titel,Buch2.titel,Buch3.titel};
java.util.Arrays.sort(buchtitelarray);
if (sortierart.equals("1")) {
 
if (aufOderAbsteigend.equals("1")) {
System.out.println(buchtitelarray);}
```

Das Problem hier ist: Ich gebe dann ja ein Array aus. Dies wird ja soweit ich weiß aufsteigend sortiert. Wie geht es aber nun absteigend? ( Es wird halt eingegeben ob auf oder absteigend sortiert werden soll)


----------



## Spacerat (12. Dez 2009)

Habe auf die PN ja schon geantwortet...
Pack nicht nur die Buchtitel in das Array, sondern die gesammten Bücher...
Schreibe dir dann Compatatoren für die einzelnen Sortiervorgänge (jeweils einen für aufsteigend und einen für absteigend, du kommst dann auf 8), überschreibe in der Klasse Book die [c]toString()[/c]-Methode, verwende dann [c]Arrays.sort(buecher, comparator)[/c] und gib das ganze dann in dieser For-Schleife aus... Was ist so schwer daran?
Hier auch nochmal der Hinweis: http://www.java-forum.org/hausaufga...eim-erschleichen-loesungen-fuer-aufgaben.html


----------



## walter911 (12. Dez 2009)

ok ich versuche es mal so.
Ich bekomme es allerdings nicht hin einen vernünftigen Comparator zu schreiben.
In den java blog buch .de was oben verlinkt ist steht z.b.


```
package de.jbb.cuc;
02	 
03	import java.util.Comparator;
04	 
05	public class BierComparator implements Comparator<Bier> {
06	 
07	  @Override
08	  public int compare(Bier b1, Bier b2) {
09	 
10	    if (b1.getInhalt() == b2.getInhalt()) {
11	      if (b1.getHerkunft().compareTo(b2.getHerkunft()) == 0) {
12	        return b1.getName().compareTo(b2.getName());
13	      }
14	      else {
15	        return b1.getHerkunft().compareTo(b2.getHerkunft());
16	      }
17	    }
18	    else if (b1.getInhalt() > b2.getInhalt()) {
19	      return -1;
20	    }
21	    else {
22	      return 1;
23	    }
24	  }
```
Dies ist ja ein Comparator für Biersorten. Allerdings nur für 3 und nicht für 4 und ich weiß nicht wie ich ihn um 1 erweitern kann da die Struktur so schon kompliziert aussieht


----------



## walter911 (12. Dez 2009)

Ich sitzte jetzt schon die ganze Zeit dran aber egal was ich versuche es funktioniert nicht 

Da ja egal nach welchen der 4 Kriterien sortiert werden soll nur der Buchname ausgegeben werden soll kann man es ja vllt auch etwas vereinfachen?

Ich hab jetzt erstmal über if anweisungen erreicht, dass wenn nach Buchname sortiert werden soll folgendes passiert:


```
String[] titelarray = new String[] {Buch1.titel, Buch2.titel, Buch3.titel};
java.util.Arrays.sort(titelarray);
if (sortieren.equals("1")) {
if (aufOderAbsteigend.equals("1")) {
System.out.println(titelarray);}

else if (aufOderAbsteigend.equals("2")){
System.out.println();}
}
```

aber nichtmal das funktioniert.
Ich dachte er sortiert dann die 3 Titel und gibt sie aus. Macht er aber nciht.
Das bringt mich zwar noch nicht zur endgültigen Lösung aber dann könnte ich es zumindest mal hinkriegen das ich nach einen der 4 Kriterien sortieren kann. Wäre zumindest schonmal ein kleiner Erfolg


----------



## L-ectron-X (12. Dez 2009)

walter911 hat gesagt.:


> ```
> String[] titelarray = new String[] {Buch1.titel, Buch2.titel, Buch3.titel};
> ```


Ich ahne Schlimmes...


----------



## walter911 (12. Dez 2009)

Also hab ich das wohl grob falsch gemacht???
könntest du mir sagen was bei dem array der Fehler ist?


----------



## walter911 (12. Dez 2009)

Edit:

Ich hab in einen anderen Thema nochmal einfacher nach etwas gefragt und jetzt erstmal einen Lösungsansatz. Also ists hier erstmal ok


----------

