OOP Logikhilfe zum Comparator

Basti4231

Bekanntes Mitglied
Hey Leute,

ich habe mir einen Comparator gebastelt, der eine Liste von Programmnamen vergleicht. Die sehen wie folgt aus:

P5001
P5002
P5003
U5032
U5033
usw.

Ich sortiere diese Programmnamen, sie befinden sich in einer ArrayList.
Die Ausgabe nach meiner Logik ist erst alles mit P und dann alles mit U, auch logisch.

Mein Vergleich ist nämlich nur so :

Java:
public int compare(String s1, String s2) {

               return s1.compareTo(s2);
    }

Diese Programme mit U sind Unterprogramme von P5003, ich muss es jetzt hinkriegen, dass die U-Programme genau nach dem P5003 in der Liste auftauchen, die ich dann in Excel schreibe.

Mir fällt nämlich gerade nicht ein, wie ich dies logisch darstellen kann, aber ich bin noch am überlegen.^^

Vielleicht könnt ihr mir ja dabei helfen ;)

lg basti
 
Zuletzt bearbeitet:
T

twagi1232010

Gast
Hi,

Du könntest zunächst den hinteren Teil des Namens vergleichen und am Ende den Buchstaben am Anfang.
Vorausetzung ist das die Zahlenfolge eindeutig ist.

Beispiel:
Java:
	// Beispiel: P5001
	// Beispiel: U5001
	public int compare(String s1, String s2) {
		
		// temp1 = 5001
		// temp2 = 5001
		String temp1 = s1.substring(1);
		String temp2 = s2.substring(1);
		
		int vergleich = temp1.compareTo(temp2);
		
		// Teilstrings sind nicht gleich
		if(vergleich != 0) {
			return vergleich;
		}
		
		// Teilstring sind gleich, dann kompletten String vergleichen
		return s1.compareTo(s2);
	}

Vielleicht hilft Dir das weiter.

Viele Grüße
twagi
 

Basti4231

Bekanntes Mitglied
Wie sieht das denn aus, wenn ich es nicht jetzt mit festen Werten mache?

Ich hätte auch noch eine andere Idee. Wenn ich beim Einlesen der Programmnamen die P schon von den U trenne und U in einer expliziten ArrayList habe und diese dann sortiere, könnte ich bei der compare Methode ein
Java:
if (s1.equals("P5003")){
   //hier dann die sortierte Liste mit U einfügen
}
return s1.compareTo(s2);

einbauen.

Aber ich weiß nicht, ob das so sinnvoll ist^^
und müsste ich vielleicht dann nicht noch ein oder s2.equals("P5003") einbauen?
???:L
 

ymene

Bekanntes Mitglied
Bin mir nicht ganz sicher, ob ich dich richtig verstanden habe, aber sollte dem so ein würde ich mir wahrscheinlich eine abstrakte Klasse Programm schreiben mit einer getName()-Methode und einem Getter/Setter für einen int "nummer". Dann folgen zwei implementierende Klassen Hauptprogramm und Unterprogramm. Hauptprogramm besitzt eine Collection von Unterprogrammen. Beide Klassen implementieren Comparable und können dann ausschließlich anhand ihrer Nummer untereinander verglichen werden (da sie ja offensichtlich immer den gleichen Buchstaben haben).

Beim Einlesen der Programmnamen unterteilst du dann einfach: wenn ein P vorne steht, wird dies ein Hauptprogramm, wenn ein U vorne steht, erzeugst du ein Untergramm und fügst das Objekt in die Collection vom letzten Hauptprogramm. Die Hauptprogramme packst du dann in eine eigene Collection.

Beim Erzeugen der Programme trennst du die Nummer aus dem Namen heraus (= int nummer ). In der getName Methode gibst du dann einfach den Buchstaben + Nummer wieder zurück.

Beim Auslesen der Hauptprogrammcollection fragst du dann einfach immer ab, ob das Hauptprogramm noch Unterprogramme hat.
 
Zuletzt bearbeitet:

jgh

Top Contributor
Hey Leute,

ich habe mir einen Comparator gebastelt, der eine Liste von Programmnamen vergleicht. Die sehen wie folgt aus:

P5001
P5002
P5003
U5032
U5033
usw.



Diese Programme mit U sind Unterprogramme von P5003,...

Woher soll man wissen, bzw. gibt es irgendeine allgemeingültige Logik, das U5032 Unterprogramm von P5001 ist, oder warum ist U5032 nicht Unterprogramm von P5003?
 

Suinos

Bekanntes Mitglied
Sieh zuerst nach, ob beide Strings von der gleichen Art (= der erste Buchstabe) sind:
  • Wenn ja: Vergleiche die Nummern
  • Wenn nein: Vergleiche die Arten
 

jgh

Top Contributor
...Diese Programme mit U sind Unterprogramme von P5003, ich muss es jetzt hinkriegen, dass die U-Programme genau nach dem P5003 in der Liste auftauchen, die ich dann in Excel schreibe.

Mir fällt nämlich gerade nicht ein, wie ich dies logisch darstellen kann, aber ich bin noch am überlegen.^^

@ Suinos
deine Anweisungen würden eine nach "Arten" und nach Nummern sortierte "Liste" geben, und nicht das von Basti gewünschte Ergebnis!

Meine Frage bleibt:
Woher soll man wissen, bzw. gibt es irgendeine allgemeingültige Logik, das U5032 Unterprogramm von P5001 ist, oder warum ist U5032 nicht Unterprogramm von P5003?
 

Basti4231

Bekanntes Mitglied
P5003 ist das Mutterprogramm. Nur es selber hat eigene Unterprogramme, für die anderen wäre es irrelevant. Es ist ebenfalls möglich, dass noch mehr als nur 2 Unterprogramme (aktueller Stand) hinzukommen.

gruß basti
 

Suinos

Bekanntes Mitglied
Die Frage bleibt bestehen:

Kannst du an den Strings selber sehen, welches Unterprogramm zu welchem Programm gehört (aufgrund der Nummer oder so), oder geht das nicht / ist das nicht vorgesehen, da sowie so nur ein Programm Unterprogramme hat?

Falls man es erkennen kann, kann man eine generelle Lösung einbauen, welche auch weiterhin funktioniert, falls doch mal weitere Unterprogramme kommen.

Ansonsten wird eben eine Extrawurst für
Code:
P5003
gebraten. ;)
 

XHelp

Top Contributor
Das hier für zumindest mal nach meiner Vorstellung zum richtigen Ergebnis.
Aber das ist natürlich nicht wirklich schön, da du z.B. P5003 fest reinkodierst
Java:
public int compare(String arg0, String arg1) {
	if (arg0.equals(arg1)) {
		return 0;
	}
	if (arg0.charAt(0)=='U') {
		if (arg1.charAt(0)=='U') {
			return (arg0.substring(1).compareTo(arg1.substring(1)));
		} else {
			int number = Integer.valueOf(arg1.substring(1));
			if (number<=5003) {
				return 1;
			} else {
				return -1;
			}
		}
	} else {
		if (arg1.charAt(0)=='U') {
			int number = Integer.valueOf(arg0.substring(1));
			if (number<=5003) {
				return -1;
			} else {
				return 1;
			}
		} else {
			return (arg0.compareTo(arg1));
		}
	}
}
 

Basti4231

Bekanntes Mitglied
Boah vielen Dank, so geht es :D

Jetz passt meine Liste und ich muss nur noch Excel schreiben, wobei es da auch Schwierigkeiten gibt, aber ich hoffe, sie beheben zu können :)

Merci beaucoup und das fixe Kodieren mit P5003 ist nicht schlimm, denn es ist so unlogisch, dass andere Programme außer 5003 Unterprogramme haben, als ob es in der Kirche kein Amen mehr gibt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B OOP Logikhilfe zum Comparator 2 Java Basics - Anfänger-Themen 12
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
M Comparator Java Basics - Anfänger-Themen 25
M Comparator Java Basics - Anfänger-Themen 4
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
N Comparable bzw Comparator Java Basics - Anfänger-Themen 5
J Comparator Java Basics - Anfänger-Themen 21
A Comparator Java Basics - Anfänger-Themen 4
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
V Comparator Java Basics - Anfänger-Themen 16
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
B Comparable & Comparator Java Basics - Anfänger-Themen 9
C Comparator und private Variablen Java Basics - Anfänger-Themen 7
S Comparator für Generiks Java Basics - Anfänger-Themen 6
Helgon Interface Comparator wird nicht instanziert Java Basics - Anfänger-Themen 3
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
E Comparator sortiert falsch... Java Basics - Anfänger-Themen 2
M Comparator Java Basics - Anfänger-Themen 7
G Comparator Problem Java Basics - Anfänger-Themen 5
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
H Comparable und Comparator Java Basics - Anfänger-Themen 22
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
A JTable sortieren mit einem Comparator Java Basics - Anfänger-Themen 2
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
G Comparator- methode compare exception werfen Java Basics - Anfänger-Themen 4
B interface Comparator Java Basics - Anfänger-Themen 4
M Hilfe bei der Erstellung der Comparator Klasse Java Basics - Anfänger-Themen 10
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
G Sortieren ohne Comparator? Java Basics - Anfänger-Themen 4
G Comparator Java Basics - Anfänger-Themen 10
S Frage zu Comparator Java Basics - Anfänger-Themen 3
G ArrayList und Comparator Java Basics - Anfänger-Themen 6
M Comparator - Sortierkriterium Java Basics - Anfänger-Themen 11
L Comparator Java Basics - Anfänger-Themen 5
T Problem mit Comparator! Java Basics - Anfänger-Themen 7
C Anstatt Spalte, Zeile mit Comparator sortieren . Java Basics - Anfänger-Themen 5
B Liste sortieren mit Comparator Java Basics - Anfänger-Themen 2
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
S JTable mit Comparator sortieren, die Frage ist wo? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
W Comparator Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben