Strings mit compareto vergleichen und array sortieren

theoneand

Aktives Mitglied
hallo zusammen,
also folgendes: hab zwar ähnliches hier schon gefunden, hat mir aber nich viel weitergeholfen....
ich hab ein array mit 3 parametern: matrnr, vorname, name
und ich soll dieses nach name sortieren.
wenn ich den namen als char mache geht alles wunderbar.... aber ein name hat meist nich einen buchstaben^^
deshalb wollte ich es mit strings machen. das problem ist aber, dass ich mit der compareto methode irgendwie die strings nich richtig vergleichen kann, da ich kein <= benutzen kann, mir ist auch klar warum, da nich der inhalt der strings verglichen wird, sondern das objekt.
das konnte ich von der doku in erfahrung bringen.
wie kann ich das ganze jetzt mit strings machen??
hier mein coding:

Java:
import java.util.*;

public class Student implements Comparable
{
	String matrnr ;
	String vorname;
	String name;
	
	Student (String matnr, String vorname, String name)
	{
		this.matrnr = matnr;
		this.vorname = vorname;
		this.name = name;
	}
	
	public int compareTo (Object oref)
	{
		
		Student sturef = (Student) oref;
		
		int i = 0;
		
		if (this.name <= sturef.name)
		{
			i = -1;
		}
		else
		{
			i = +1;
		}
		
		return i;

	}	
}


Java:
import java.util.Arrays;


public class Test_Student
{
	public static void main (String []args)
	{
		Student [] students = new Student [7];
		students [0] = new Student ("150", "hans", "zimmel");
		students [1] = new Student ("150", "hans", "yimmel");
		students [2] = new Student ("150", "hans", "ximmel");
		students [3] = new Student ("150", "hans", "wimmel");
		students [4] = new Student ("150", "hans", "vimmel");
		students [5] = new Student ("150", "hans", "uimmel");
		students [6] = new Student ("150", "hans", "timmel");
		
		
		Arrays.sort (students);
	/*	System.out.println (students[0].name);
		System.out.println (students [6].name);
		*/
		for(int i = 0; i <=6; i++)
		{
			System.out.println (students[i].name);
		}
		
		
	}
}
 
Zuletzt bearbeitet:
G

Gast2

Gast
String implementiert Comparable.
Wenn du nach name sortieren willst reicht folgendes:
Java:
public int compareTo(Student s) {
  return name.compareTo(s.name);
}

EDIT:
Und das nächste mal bitte ne Überschrift wählen.
 

Kiri

Bekanntes Mitglied
so sollte es gehen:

Java:
    public int compareTo (Object oref)
    {
        Student sturef = (Student) oref;
        return name.compareTo(sturef.name);
    }
 

theoneand

Aktives Mitglied
ja, habs auch gesehen, dass ich keinen titel drin hatte^^ habs geändert

ich steh glaub voll aufm schlauch.....
wenn ich deine compareto methode einsetze, sagt er mir:

The type Student must implement the inherited abstract method Comparable.compareTo(Object)

was is jetzt wieder falsch.....

Java:
import java.util.*;

public class Student implements Comparable
{
	String matrnr ;
	String vorname;
	String name;
	
	Student (String matnr, String vorname, String name)
	{
		this.matrnr = matnr;
		this.vorname = vorname;
		this.name = name;
	}
	



public int compareTo(Student s) {
	  return name.compareTo(s.name);
	}
}
 

theoneand

Aktives Mitglied
aber wozu brauch die zuweisung der ref noch??

Student sturef = (Student) oref;

hat sich erledigt, habs verstanden^^
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Naja, weil der Methodenparameter ein Object ist und kein Student... oder was meinst du?

EDIT: Ich glaube, das war´s, was EikeB mit "unnötigen Cast" gemeint hat...
 

Wuast

Bekanntes Mitglied
Ich greife das mal auf (und "müll" das Forum mit meinen Fragen zu), weil ich da auch gerade dran bin.

Bei mir sind es nicht Studenten, sondern einfach Personenobjekte. Die will ich jetzt mit compareTo nach Nachnamen sortieren und (falls identisch) subsidiär nach Vornamen.

Java:
@Override
    public int compareTo(Personen personenobjekt) {
        return this.nachname.compareTo(personenobjekt.getNachname());
    }

Ich habe jetzt zwei Personenobjekte:
Code:
Personen person1 = new Personen ("Herr", "Hans", "Müller");
Personen person2 = new Personen ("Herr", "Franz", "Meier");

liefert mir jetzt in der Ausgabe die Zahl 151. Ich hatte die Hoffnung, dass der mir nun zunächst das Objekt nennt, welches den Nachnamen ausspuckt, welches eher im Alphabet kommt, also "Herr Hans Meier". Taugt die compareTo dazu nicht bzw. wie sollte ich denn jetzt den int dahingehend nutzen?

Hoffe die Frage ist nicht völlig bescheuert aber ich checks noch nicht ganz.
Danke vorab
 

temi

Top Contributor
augt die compareTo dazu nicht bzw. wie sollte ich denn jetzt den int dahingehend nutzen?

Hoffe die Frage ist nicht völlig bescheuert aber ich checks noch nicht ganz.
Lies die Doku: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-

Dieser Tipp gilt generell, denn die Dokumentation ist sehr gut und es ist wichtig damit zu arbeiten und auch arbeiten zu können.

Zu deiner Frage: Die Interpretation des Ergebnisses musst du erledigen. Der positive Wert von 151 (der genaue Wert ist irrelevant) sagt, dass Müller "größer" ist als Meier. In deinem dazu gehörigen Algorithmus kannst du also schreiben:
Java:
if (thisPerson.compareTo(otherPerson) > 0) {
    // passende Tauschoperation(en)
}

Hinweis: Sollten deine Personen als Collection vorliegen, z. B. List<Person>, dann kannst du die Convenience-Methode sort() der Klasse Collections zum Sortieren verwenden. Für Arrays gibt es Ähnliches. Damit ersparst du es dir selbst einen Sortier-Algorithmus implementieren zu müssen.
 
Zuletzt bearbeitet:

Wuast

Bekanntes Mitglied
Danke. D.h. wenn das, was ich gepostet habe, schon alles war, ist die Sache erstmal noch recht nutzlos. xD ich fuchs mich nochmal rein :)
 

Wuast

Bekanntes Mitglied
hab ich :) klingt pausibel und so in etwa hatte ich es auch verstanden.
aber zu
Zu deiner Frage: Die Interpretation des Ergebnisses musst du erledigen. Der positive Wert von 151 (der genaue Wert ist irrelevant) sagt, dass Müller "größer" ist als Meier. In deinem dazu gehörigen Algorithmus kannst du also schreiben:
Java:
if (thisPerson.compareTo(otherPerson) > 0) {
    // passende Tauschoperation(en)
}
frage ich mich: So wie ich es verstanden habe, liefert die compareTo bei Strings lexikografische Ergebnisse?! Was heißt denn dann "größer"? Ich habe Schmitz und Meier compared und Schmitz ist "größer" (6), umgekehrt kommt wie zu erwarten -6 heraus. Aber Schmitz wäre in einer alphabetischen Reihenfolge doch hinter Meier.

Muss man in der praktischen Anwendung also einmal ausprobieren, was herauskommt, um dann im Anschluss entsprechende Bedingungen zu formulieren? Will ich jetzt nur von zwei Namen wissen, welcher eher im Alphabet kommt, könnte es in diesem Fall doch etwas sein wie

Code:
@Override
    public int compareTo(Personen personenobjekt) {
        
        if (this.nachname.compareTo(personenobjekt.getNachname()) > 0) {
            System.out.println(personenobjekt.getNachname());
        }
        if (this.nachname.compareTo(personenobjekt.getNachname()) < 0) {
            System.out.println(this.nachname);
        }   
        if (this.nachname.compareTo(personenobjekt.getNachname()) == 0) {
            
        
            if (this.vorname.compareTo(personenobjekt.getVorname()) > 0){
                System.out.println(personenobjekt.getNachname());
            }
            if (this.vorname.compareTo(personenobjekt.getVorname()) < 0){
                System.out.println(this.nachname);
            }
        }
        
        return this.nachname.compareTo(personenobjekt.getNachname());
        
    }

Hier freue ich mich auch (noch) über einen Tipp, wie ich es schaffe, dass das Return sinnvoll löse, sodass es beim Methodenaufruf nur den Meier anzeigt als erster im Alphabet? Die Methode muss ja immer einen int zurückgeben.
 

KonradN

Super-Moderator
Mitarbeiter
Ich habe Schmitz und Meier compared und Schmitz ist "größer" (6), umgekehrt kommt wie zu erwarten -6 heraus. Aber Schmitz wäre in einer alphabetischen Reihenfolge doch hinter Meier.
Und das ist ja auch, was das Ergebnis besagt.

Schauen wir mal Integer an und vergleichen die:
6 compareto 1 -> Ergebnis ist > 0 -> 6 ist größer als 1 .... Reihenfolge ist daher erst die 1 und dann die 6
"Schmitz" compareTo "Maier" -> Ergebnis ist > 0 -> "Schmitz" ist größer - die Reihenfolge ist also erst "Maier" und dann "Schmitz"

Hier freue ich mich auch (noch) über einen Tipp, wie ich es schaffe, dass das Return sinnvoll löse, sodass es beim Methodenaufruf nur den Meier anzeigt als erster im Alphabet? Die Methode muss ja immer einen int zurückgeben.
Was genau willst Du also?
- Eine Compare-to Methode die Vergleicht. Da ist erst einmal keine Ausgabe. (Du verkomplizierst damit ja die ganze Methode, wäre ich immer Vorsichtig mit. Klar, das kann als eine Art "Debugging" hilfreich sein aber immer überlegen, ob man dies wirklich braucht.
- Du willst Nachnamen vergleichen. Wenn diese gleich sind, willst Du die Vornamen vergleichen. Das Ergebnis ist dann der letzte Vergleich.

Das können wir noch in Pseudo-Code schreiben:
result := Vergleich Nachnamen
Wenn result == Gleichheit dann result := Vergleich Vornamen
Gibt result zurück

Das solltest Du jetzt 1:1 in Java Code umsetzen können denke ich mal.

Und prinzipiell hattest Du sowas in der Art auch schon - nur eben hattest Du erst einmal nur reine Anzeigen und Du hast die Vergleiche immer wieder aufgerufen, anstatt diese zu speichern. Du warst also extrem nah dran würde ich sagen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 HILFE! Strings mit CompareTo vergleichen Java Basics - Anfänger-Themen 3
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
L compareTo bei Strings? Java Basics - Anfänger-Themen 4
W compareTo für 3 Strings Java Basics - Anfänger-Themen 11
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 10
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
B 4 Strings, Anfangsbuchstaben muss unterschiedlich sein Java Basics - Anfänger-Themen 12
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
B mir nur die Gesamtzahl von einzigartigen Strings aus Array ausgeben lassen Java Basics - Anfänger-Themen 5
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
C 2 Strings Java Basics - Anfänger-Themen 15
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
javaerd Wie kann ich Brute Force Methode mit Strings erweitern Java Basics - Anfänger-Themen 1
R Erste Schritte Strings "einrücken" Java Basics - Anfänger-Themen 3
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
B gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben Java Basics - Anfänger-Themen 5
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
L Werte von Strings ? Java Basics - Anfänger-Themen 1
L Strings und Arrays - Expand Java Basics - Anfänger-Themen 12
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
Syncopated Pandemonium Verketten von Strings funktioniert nicht Java Basics - Anfänger-Themen 4
F Wahrscheinlichkeit von Strings Java Basics - Anfänger-Themen 3
MiMa Splitten eines Strings Java Basics - Anfänger-Themen 5
T Hashfunktion für Strings Java Basics - Anfänger-Themen 3
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
T Strings ersetzen mit \ Java Basics - Anfänger-Themen 10
K Strings bearbeiten Java Basics - Anfänger-Themen 14
N Bestimmte Zeichen eines Strings umwandeln Java Basics - Anfänger-Themen 4
L Java Strings Buchstaben vertauschen Java Basics - Anfänger-Themen 4
L Strings in einem JOptionPane farbig Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben