Wörter in umgekehrter Reihe sortieren

okay habs ein bisschen weiter begriffen, aber wie sollte ich in meiner Klasse compareTo benutzen, wenn ich keine Strings habe die ich miteinander vergleiche.
Muss ich da irgendwelche Objekte vergleichen? (hab ich aber doch auch keine Übergeben... oder?
 
Erst mal ganz von vorne und eine Zusammenfassung von dem was die Anderen schon gesagt haben :

1. Java API Documentation runterladen, und am besten mal schauen was die statische Methode Arrays.sort(Object[], Comparator) macht, denn die wird ja aufgerufen.

2. Verstehen das dein übergebener erster Parameter args[] ein Array von Strings aus allen der main methode übergebenen Parametern ist, wenn du z.B. in deiner Kommandozeile eingibst :
java meinTollesProgramm Sepp Hugo Otto
hast du in args[] {"Sepp","Hugo","Otto"} stehen, wenn du keine Parameter übergibst, ist das Array natürlich leer, (und ein leeres Array sieht sortiert genauso aus wie unsortiert) !

3. Deine Klasse InverseComparator muss das Interface Comparator implementieren, und dabei die Methoden compare() und equals() implementieren. Auch hier am besten Mal in der Java API Reference nachschauen.
In deinem InverseComparator musst du compare() halt so schreiben das er zwei Strings in entgegengesetzter alphabetischer Reihenfolge sortiert, die equals() Methode lässt du am Besten einfach weg ( dann wird die von java.lang.Object genommen)

4. Jetzt verstehen das dein Beispielprogramm die statische Methode Arrays.sort(Object[], Comparator) aufruft, dabei als Übergabeparameter deine Kommandozeilenparameter als Array hat, und in der sort() Methode dieses Array nach den Vorschriften in deiner compare() Methode sortiert wird.


Hoffe das dir jetzt klar ist was du tun sollst :)
 
Nachdem ich in der Uni noch eine ganze Weile drüber gebrütet habe und das hier nochmal gelesen habe, merke ich, dass ich heute schon ruasgefunden habe, was ich machen muss, aber wahrscheinlich mich nur damit befassen muss, damit ich weiß wie das ganze programmiert aussieht.
 
hmm, ich würde die Sache so angehen:

Code:
String[] as = {"Heinz", "Max", "Emil", "Jonas"};
Arrays.sort(as, new MyComparator());
for (int i = 0; i < as.length; i++) {
System.out.println(i + "=" + as[i]);
}
 
private class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
	return o2.toString().compareTo(o1.toString()); //invers
}
}
 
Ich glaube zu schnuffies code beispiel, kann ich nix mehr hinzufügen. Es erschlägt schon deine bedürfnisse ;)

Nice work Schnuffie!


Hier hast du einen Link zu dem Interface Comparator:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Comparator.html

Und hier noch zu der Klasse String:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

für die compareTo methode ;)

um das beispiel besser nachvollziehen zu können.

Ich hoffe du weisst was ein Interface ist und wofür es gut ist, ansonsten google mal danach! ;)


Gruss

Torsten
 
Zuletzt bearbeitet:
schnuffie hat gesagt.:
hmm, ich würde die Sache so angehen:

Code:
String[] as = {"Heinz", "Max", "Emil", "Jonas"};
Arrays.sort(as, new MyComparator());
for (int i = 0; i < as.length; i++) {
System.out.println(i + "=" + as[i]);
}
 
private class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
	return o2.toString().compareTo(o1.toString()); //invers
}
}

Halli hallo also ich würde das ganze mit einem Collator-Object machen, damit ich, was die Sortierung angeht, auch National-Language-Support bekomme (man achte auf Umlaute etc. denn sonst würden Worte mit z.B. Ö nicht derekt nach OE sortiert sondern ans Endes des Alfabets gesetzt)

Deine Comperator-Klasse sollte also lediglich als Membervariable den Collator haben den du aus dem Package java.text.* holen kannst.
als kleines Bonus ist es vielleicht gut, Groß und Kleinschreibung dabei außer Acht zu lassen das kann man entweder mit einem toLowerCase() oder einem toUpperCase() bewerkstelligen.

protected Collator m_collator = Collator.getInstance();

in deiner compare-Routine lässt Du einfach dann den Collator vergleichen . Also müsste das ganze ungefär wie folgt aussehen:

Code:
...
import java.text.*
...

String[] as = {"Heinz", "Max", "Emil", "Jonas", "Österreich", "Ärger", "Anna", "Otto", "Zebra"};
Arrays.sort(as, new MyComparator());
for (int i = 0; i < as.length; i++) 
{
    System.out.println(i + "=" + as[i]);
}
 
private class MyComparator implements Comparator 
{
   private Collator    collator  = Collator.getInstance();  // richtet sich nach dem DefaultLocale
   public int compare(Object o1, Object o2) 
   {
      String s1 = o1.toString().toLowerCase();
      String s2 = o2.toString().toLowerCase();
      return collator.compare(s2,s1);
   }
}

Du kannst gerne das ganze mit dem einen oder dem anderen Comperator ausprobieren und die Unterschiede erkennen

viel Spaß

Takidoso
 
Hi Takidoso,

man lernt doch nie aus. Wusste gar nicht das es so eine klasse in java existiert. Sollte mich mal wieder etwas mehr mit den ganzen libraries beschäftigen ;)

Aber wofür bin ich denn sonst auf tutorials.de angemeldet ;)


Danke für die Informationen.

Gruss

Torsten


EDIT:*ichsolltevielleichtauchdennamenvondirrichtigschreiben* ;)
 
Zuletzt bearbeitet:
Zurück