# Zahlen sortieren und String zuweisen



## Vril (4. Mrz 2006)

Hallo,
ich habe da ein Problem, das ich nur mit "sehr vielen" if-Abfragen lösen kann. Daher wollte ich mal fragen ob jemanden evtl. eine elegantere Lösung einfällt:

1. Ich habe 5 verschiedene Zahlen, diese Zahlen können bei jedem Vorgang einen anderen Größenwert einnehmen
2. Diese 5 Zahlen, nennen wir sie Zahl_A, Zahl_B, Zahl_C, Zahl_D und Zahl_E soll jeweils ein String zugeordnet sein, Text_A, Text_B, Text_C, Text_D und Text_E
3. Jetzt sollen die Zahlen absteigend sortiert werden und anschließend, der sortierung entsprechend, ausgegeben werden. Hier sollen jetzt aber nicht die Zahlen selbst, sondern die entsprechenden Texte_* sortiert ausgegeben werden.
4. Ist eine der Zahlen 0, wird kein Text ausgegeben
5. Bei der Textausgabe soll jeweils der Rang der Sortierung vorangestellt werden

Hier einmal zwei Beispiele:
Zahl_A = 5, Zahl_B=10, Zahl_C=6, Zahl_D=3, Zahl_E=8
!Sortieren
Ausgabe:
"1. Text_B"
"2. Text_E"
"3. Text_C"
"4. Text_A"
"5. Text_D"

Noch ein Beispiel:
Zahl_A=22, Zahl_B=0; Zahl_C=12, Zahl_D=0, Zahl_E=11
!Sortieren
Ausgabe:
"1. Text A"
"2. Text C"
"3. Text E"

Hat zufällig jemand eine Idee wie man das ohne seitenweise if-Abfragen lösen kann?


----------



## Beni (4. Mrz 2006)

1. Zahlen ab in ein Array.
2. Strings und Zahlen über eine Map verknüpfen.
3. Zahlenarray mit "java.util.Arrays.sort" sortieren lassen.
4. Die Einträge des Arrays durchgehen, und den entsprechenden Text aus der Map abrufen.

Es gibt auch eine andere Variante, die die Zahl und der Text in einer Klasse kombinieren, und mit "Comparable" eine Ordnung definieren.


----------



## Caffè Latte (4. Mrz 2006)

Hi,

hört sich nach Schlüssel-/Wertepaaren an, also Maps. Wenn es sortiert sein soll, dann schau dir mal die Doukumentation zu *TreeMap* an.

Hoffe es hilft ...

Caffè latte


----------



## Vril (4. Mrz 2006)

Hört sich schon mal nicht schlecht an, danke!
Meine Literatur gibt aber leider zum Thema Map nicht so viel her! Vor allem zu Punkt 2. und 4.!
Hat da zufällig jemand ein konkretes Beispiel?


----------



## flanker (5. Mrz 2006)

```
java.util.SortedMap map = new java.util.TreeMap(new java.util.Comparator() {
  public int compare(Object o1, Object o2) {
    //Hier aufpassen, cce!
    Integer i1 = (Integer) o1;
    Integer i2 = (Integer) o2;
    return i2.compareTo(i1);
  }
});
```

Den Rest kriegst du schon hin.
Mal ehrlich, ist es nicht eine Hausaufgabe?


----------



## Vril (5. Mrz 2006)

Mein Aufgabenstellung hört sich wirklich wie eine Hausaufgabe an, stimmt! Aber ganz ehrlich es ist keine, sprich ich hab mir die Aufgabe selber gestellt, da ich solche Sachen immer versuche mit if-Abfragen zu lösen, ab einem gewissen Grad, wie hier 5 Zahlen & Strings, geht das ganze aber ins Uferlose!

Bezieht sich dein Codebeispiel jetzt auf Punkt 2. oder 4.?  Komm damit noch nicht so wirklich weiter!


----------



## flanker (5. Mrz 2006)

weder noch,
wie man sieht, es wird ein SortedMap geschaffen mit einem Comparator, der seine Keys absteigend sortiert.
In deinem Fall sind es Integer-s. Du must nur deine Einträge in map legen und anschliessend mit Iterator durchlaufen und ausgeben. Ja, und Key mit dem Wert intValue() == 0 auslassen, wie gefordert, und ein lokaler Zähler brauchst du noch, um "1., 2. " u.s.w. zu setzen:


```
map.put(Integer.valueOf(Zahl_A), Text_A);
map.put(Integer.valueOf(Zahl_B), Text_B);
//u.s.w.

int counter = 1;
for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();) {
  Integer i = (Integer) it.next();
  if (i.intValue() == 0) continue;
  System.out.println(counter++ + ". " + map.get(i).toString());
}
```


----------



## Vril (6. Mrz 2006)

Hat geklappt! Danke, auch nochmal an Beni!


----------

