compareTo warum geht es nicht?

tribor

Neues Mitglied
Hallo ich habe ein Problem. Die Aufgabe lautet wiefolgt:

Es ist ein Programm vorgegeben, das zuerst Worte in eine Liste einfügt, dann die Worte in der Liste nach der Anzahl ihrer Vokale aufsteigend sortieren soll und zuletzt den sortierten Inhalt der Liste auf dem Bildschirm ausgibt.
Leider ist das Programm unvollständig.
Erweitern Sie das vorgegebene Programm um eine Klasse Wort, die ein Wort darstellen soll. Die
Klasse Wort soll das Interface Comparable implementieren, damit man Objekte der Klasse Wort
vergleichen und sortieren kann. Beachten Sie bei der Implementierung der Methode public int
compareTo(Wort o), dass die Objekte der Länge nach aufsteigend sortiert werden sollen. Des
Weiteren muss die Klasse Wort die Methode public String toString() überschreiben, damit
die Ausgabe des Listeninhaltes auf dem Bildschirm funktioniert. Weitere notwendige Attribute und
Methoden (bzw. Konstruktoren) können Sie in die Klasse Wort einfügen.
das ist der gegebene Code:
Java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class WoerterMain {
  public static void main(String[] args) {
    List<Wort> liste = new ArrayList<Wort>();
    liste.add(new Wort("Diese"));
    liste.add(new Wort("Worte"));
    liste.add(new Wort("sollen"));
    liste.add(new Wort("der"));
    liste.add(new Wort("Laenge"));
    liste.add(new Wort("nach"));
    liste.add(new Wort("sortiert"));
    liste.add(new Wort("werden."));
    Collections.sort(liste);
    System.out.println(liste);
  }
}

Das ist die angesprochene Klasse Wort die ich selber geschrieben habe:

Java:
import java.util.Collections;
import java.util.List;
public class Wort implements Comparable<Wort>{
	public String vergleichswort;
	public int vergleich;
	public int zurueck;
	public Wort(String Wort) {
		this.vergleichswort = Wort;
	}
	
	public  int compareTo(Wort o){		
		vergleich=0;	
			for(int i = 0; i < vergleichswort.length(); i++) {
		    vergleich=0;	
			char c = vergleichswort.charAt(i);
			if (c=='a')vergleich+=1;
			else if (c=='e') vergleich+=1;
			else if (c=='i') vergleich+=1;
			else if (c=='o') vergleich+=1;
			else if (c=='u') vergleich+=1;
			else if (c=='A') vergleich+=1;
			else if (c=='E') vergleich+=1;
			else if (c=='I') vergleich+=1;
			else if (c=='O') vergleich+=1;
			else if (c=='U') vergleich+=1;
			}
			if (o.vergleich < this.vergleich){
			return zurueck=1; } else
			if (o.vergleich > this.vergleich){
			return zurueck=-1;}
			if (o.vergleich == this.vergleich){
			
			return zurueck=0;}
			return zurueck;
	}
	 public String toString(){
		return this.vergleichswort;
		
	}
	}

als ausgabe bekomme ich:
[sollen, der, nach, sortiert, werden., Worte, Diese, Laenge]


statt:
[der, nach, Worte, sollen, werden., Laenge, Diese, sortiert]

wo liegt mein Fehler? Brauche schnelle Hilfe, denn abgabe ist in 30 minuten und ich sitze schon fast 4 Stunden erfolglos an dieser Aufgabe...
 

eRaaaa

Top Contributor
Du musst auch noch die Anzahl der Vokale von dem "vergleichswort" von o ermitteln und dann eben Anzahl Vokale von this.vergleichswort mit o.vergleichswort vergleichen

Java:
    public int compareTo(Wort o) {
	int vergleich = 0, vergleich2 = 0;
	for (int i = 0; i < vergleichswort.length(); i++) {
	    char c = vergleichswort.charAt(i);
	    if (c == 'a')
		vergleich += 1;
	    else if (c == 'e')
		vergleich += 1;
	    else if (c == 'i')
		vergleich += 1;
	    else if (c == 'o')
		vergleich += 1;
	    else if (c == 'u')
		vergleich += 1;
	    else if (c == 'A')
		vergleich += 1;
	    else if (c == 'E')
		vergleich += 1;
	    else if (c == 'I')
		vergleich += 1;
	    else if (c == 'O')
		vergleich += 1;
	    else if (c == 'U')
		vergleich += 1;
	}
	for (int i = 0; i < o.vergleichswort.length(); i++) {
	    char c = o.vergleichswort.charAt(i);
	    if (c == 'a')
		vergleich2 += 1;
	    else if (c == 'e')
		vergleich2 += 1;
	    else if (c == 'i')
		vergleich2 += 1;
	    else if (c == 'o')
		vergleich2 += 1;
	    else if (c == 'u')
		vergleich2 += 1;
	    else if (c == 'A')
		vergleich2 += 1;
	    else if (c == 'E')
		vergleich2 += 1;
	    else if (c == 'I')
		vergleich2 += 1;
	    else if (c == 'O')
		vergleich2 += 1;
	    else if (c == 'U')
		vergleich2 += 1;
	}
	return vergleich - vergleich2;
    }

Wobei das natürlich nicht so schön aussieht :)
Man kann sich auch mehrere Methoden schreiben :D

Vllt irgendiwe so dann:
Java:
    public int compareTo(Wort o) {
	return this.countVowels() - o.countVowels();
    }

    private int countVowels() {
	int vowels = 0;
	for (char c : this.vergleichswort.toCharArray()) {
	    if (isVowel(c))
		vowels++;
	}
	return vowels;
    }

    private boolean isVowel(char c) {
	switch (c) {
	case 'a':
	case 'A':
	case 'e':
	case 'E':
	case 'o':
	case 'O':
	case 'u':
	case 'U':
	case 'i':
	case 'I':
	    return true;
	default:
	    return false;
	}
    }

Wozu jetzt die beiden Objektvariablen vergleich und zurueck dienen - ???:L
 

0x7F800000

Top Contributor
Java:
	switch (c) {
	case 'a':
	case 'A':
	case 'e':
	case 'E':
	case 'o':
	case 'O':
	case 'u':
	case 'U':
	case 'i':
	case 'I':
	    return true;
	default:
	    return false;
	}
    }
Sieht vielleicht schon etwas hübscher aus, als die monströsität davor, allerdings hat's asymptotisch immer noch lineare laufzeit in der anzahl der interessanten Buchstaben.

=> Hashen!
Java:
import java.util.*;
import static java.util.Arrays.*;
import static java.lang.System.*;

public class VocalCounting {
	
	private static final Set<Character> VOCALS = new HashSet<Character>();
	static { 
		String s = "aeiouäöü";
		for(char c:s.toCharArray()) VOCALS.add(c);
		for(char c:s.toUpperCase().toCharArray()) VOCALS.add(c);
	}
	
	private static int countChars(String s, Set<Character> interestingChars){
		int cnt = 0;
		for(char c:s.toCharArray()) if(interestingChars.contains(c)) cnt++;
		return cnt;
	}
	
	private static int countVocals(String s){
		return countChars(s,VOCALS);
	}
	
	public static void main(String..._){
		List<String> list = new ArrayList<String>(asList("Hallo","Ärger","Umweltschutzorganisation","Ähm","Ahaaa!","rtzfghbnm","ioioauoÜäÖü"));
		Collections.sort(list,new Comparator<String>(){
			@Override
			public int compare(String a, String b) {
				return countVocals(a)-countVocals(b);
			}
		});
		out.println("Vocals: "+VOCALS);
		out.println("Sorted: "+list);
	}
}
Bemerkung: selbstverständlich wird die version mit den zwanzig if-elses immer noch schneller laufen, als die initialisierung der HashMap, aber es geht ja um's prinzip & verallgemeinerung^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Wie geht das mit compareTo Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
J compareTo()- und equals-Methode Java Basics - Anfänger-Themen 3
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
B Methoden compare() und compareTo() Java Basics - Anfänger-Themen 1
P compareTo() Java Basics - Anfänger-Themen 3
C compareTo verwenden Java Basics - Anfänger-Themen 2
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
K hashCode, compareTo vs. equals Java Basics - Anfänger-Themen 3
J Sortier alternativen mit der compareTo Methode? Java Basics - Anfänger-Themen 6
J TreeSet mit compareTo sortieren Java Basics - Anfänger-Themen 2
K compareTo(String arg) überschreiben Java Basics - Anfänger-Themen 4
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
M CompareTo soll Datum sortieren Java Basics - Anfänger-Themen 2
S compareTo() und equals() Java Basics - Anfänger-Themen 6
A Objekte aus 2 Klassen mit compareTo() vergleichen Java Basics - Anfänger-Themen 7
K CompareTo zwei mal benutzen klappt nicht. Java Basics - Anfänger-Themen 2
1 HILFE! Strings mit CompareTo vergleichen Java Basics - Anfänger-Themen 3
R compareTo & equals Java Basics - Anfänger-Themen 10
T Methoden Wie compareTo() Methode implementieren? Java Basics - Anfänger-Themen 9
T Strings mit compareto vergleichen und array sortieren Java Basics - Anfänger-Themen 14
P Generischer Binärbaum (compareTo Frage) Java Basics - Anfänger-Themen 4
J Probleme mit Comparable, compareTo() Java Basics - Anfänger-Themen 2
R compareTo Liste sortieren Java Basics - Anfänger-Themen 5
L compareTo bei Strings? Java Basics - Anfänger-Themen 4
D OOP mit compareTo Array sortieren (aus zwei Klassen) Java Basics - Anfänger-Themen 3
W compareTo für 3 Strings Java Basics - Anfänger-Themen 11
M compareTo-Sortierungsproblem Java Basics - Anfänger-Themen 16
F compareTo - Sortierung nach 2 Argumenten Java Basics - Anfänger-Themen 10
G in compareTo umschreiben Java Basics - Anfänger-Themen 4
A Die "compareTo( )" methode Java Basics - Anfänger-Themen 16
J compareTo Java Basics - Anfänger-Themen 4
G compareTo Java Basics - Anfänger-Themen 12
M o.compareTo(o) Java Basics - Anfänger-Themen 13
K compareTo in Verbinug mit Arrays.sort() Java Basics - Anfänger-Themen 4
Bierhumpen compareTo. Wie setze ich es ein Java Basics - Anfänger-Themen 11
R compareTo Java Basics - Anfänger-Themen 2
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
H Wie geht eigentlich Objektorientierung? Java Basics - Anfänger-Themen 14
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
melisax Lower & Uppercase Beispielprogramm geht nicht Java Basics - Anfänger-Themen 3
MarcKKKK123 Wie geht das? Java Basics - Anfänger-Themen 1
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
W App geht live und dann? Java Basics - Anfänger-Themen 9
P Geht es vielleicht viel kürzer? Java Basics - Anfänger-Themen 7
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
S Geht das bei Java ? Java Basics - Anfänger-Themen 11
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
CptK Klassen KeyListner geht nicht Java Basics - Anfänger-Themen 7
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
MR._FIRE_Flower String.split("(") geht nicht Java Basics - Anfänger-Themen 4
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
K Klassen Nachträglich ein Objekt einem anderen zuweisen, geht das? Java Basics - Anfänger-Themen 2
S int addieren geht nicht Java Basics - Anfänger-Themen 13
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
S Komma geht beim Schreiben ins csv verloren. Java Basics - Anfänger-Themen 6
M Arrays einspeichern geht nicht Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
J Geht mit Java überhaupt was? Java Basics - Anfänger-Themen 13
J Debuggen - wie geht das? Java Basics - Anfänger-Themen 6
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
J Ausführen geht nicht Java Basics - Anfänger-Themen 19
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
I Java Code so gut es geht Kommentieren Java Basics - Anfänger-Themen 4
S Button "Berechnen" geht nicht Java Basics - Anfänger-Themen 3
B Compiler-Fehler Ein Java-Eclipse-Anfänger geht auf Reisen... Java Basics - Anfänger-Themen 10
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
T fianl array geht nicht... Java Basics - Anfänger-Themen 2
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
B Nichts geht mehr Java Basics - Anfänger-Themen 10
D Java geht auf windows 64 bit nicht. Java Basics - Anfänger-Themen 5
V Einfacher vergleich von Arrays geht schief Java Basics - Anfänger-Themen 2
T sample.war geht nicht... Java Basics - Anfänger-Themen 1
Thallius Klassen aus Classname programmatisch erzeugen. Wie geht das in java? Java Basics - Anfänger-Themen 5
C Datentypumwandlung geht nicht Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben