Methode zum "StringVergleich" in Java funktioniert nicht?

Seliba  26.05.2024, 19:07

Was genau funktioniert denn nicht? Gibt es eine Fehlermeldung? Passiert nicht das, was du erwartest? Wenn ja: was soll denn passieren, und was passiert tatsächlich?

MattThomes 
Beitragsersteller
 26.05.2024, 19:10

Ausgabe die funktioniert:

Erster Text: ABCDEFGHIJKLM
Zweiter Text: ABCDEFGHIJKLMNOPQ
Text2 enthält 4 mehr Zeichen als Text1!

Da fehlt aber die Ausgabe der stringCompare() Methode.

2 Antworten

Von Experte ralphdieter bestätigt
ChatGPT hilft auch nicht weiter.

Hast du den ganzen Code denn aus ChatGPT? Der ist nämlich sagenhaft umständlich, obwohl die Exceptionbehandlung auch noch völlig unbrauchbar ist. Ein abschreckendes Beispiel, wie man es nicht machen sollte.

Aber wieso funktioniert die Methode "stringCompare()" nicht? Sie ist doch korrekt und wird von mir aufgerufen. Bei den Dateien handelt es sich um unterschiedlich lange Strings, ich lande also nicht im letzten "else" Block.

Was erwartest du von der Methode?

Sie vergleicht ja die beiden unterschiedlich langen Strings nur bis zur Länge des kürzeren Strings. Wenn die bis zu dieser Länge identisch sind, gibt es auch keine Ausgabe.

Das sollte dir aber klar sein, wenn du den Code selber geschrieben hast.


MattThomes 
Beitragsersteller
 26.05.2024, 19:24

Autsch, ich bin erst im ersten Semester, aber ich bemühe mich. Den Code habe ich selbstverständlich selber geschrieben, die Methode allerdings, wie in der Aufgabenstellung gewollt, von unserem Prof übernommen. Ich habe die beiden Textdateien nach Vorlage der Aufgabe erstellt, mir ist aber nicht aufgefallen, dass er das I und J im zweiten Text vertauscht hatte. Jetzt klappt es natürlich.

Jetzt frage ich aber doch nochmal nach, da es uns so beigebracht wurde. Was ist das Problem bei der vorhandenen Exceptionbehandlung?

LG

0
jo135  26.05.2024, 19:30
@MattThomes

Sie ist völlig sinnlos. Wenn man nicht weiß, was man mit einer Exception macht, gibt man sie zum Aufrufer weiter: das ist genau die Idee von Exceptions zur Fehlerbehandlung. Wenn das letztlich zum Programmabbruch führt, ist das gut so.

Hier wird zwar ein Stacktrace auf stdout geschrieben, aber sonst nichts gemacht. Das ist in jeder Hinsicht die schlechteste Entscheidung: der Aufrufer hat keine Ahnung, dass etwas schiefgelaufen ist, das Programm läuft trotzdem weiter. Der Fehler wird also ohne Konsequenzen "geschluckt", und der Benutzer bekommt eine unverständliche Ausgabe, mit der er nichts anfängt.

Die abenteuerliche Behandlung im finally-Zweig ist ebenso sinnlos. Zumindest(!) sollte ein try-with-resources für zuverlässiges Schließen verwendet werden. Das spart nicht nur mehrere Zeilen Code, es ist auch robuster.

2
MattThomes 
Beitragsersteller
 26.05.2024, 19:58
@jo135

Ich musste mir erst einmal anschauen, was man unter "try-with-resources" versteht. Das Konzept hatte ich zwischendurch mal in ChatGPT gesehen, uns wird es aber anders beigebracht. Der gute Mann ist aber auch schon etwas älter. Man muss wahrscheinlich für eine optimale Lernerfahrung sowieso alles hinterfragen und auf die jeweilige Aktualität prüfen.

Vielen Dank für die Hilfe! :)

1
jo135  26.05.2024, 20:08
@MattThomes

Das sind allerdings keine wirklich neuen Konzepte, das alles gibt es zumindest seit mehr als einem Jahrzehnt (die Grundidee von Exceptions ist mindestens 30 Jahre alt).

Leider sind aber manche Vortragende hoffnungslos weit von der modernen Praxis entfernt...und dann wird gejammert, dass Java so eine "veraltete Sprache" sei...

In einem realistischen Programm würde man sich das Leben mit der Klasse Files drastisch vereinfachen.

1
MattThomes 
Beitragsersteller
 26.05.2024, 20:41
@jo135

Ich habe jetzt mal etwas mit der Klasse Files herumgespielt und bin begeistert. Es erleichtert ja alles enorm. Es ist sehr schade, dass so stur älteres Wissen vermittelt wird. Vielleicht zum Abschluss irgendwelche Tipps mit guten Quellen, um solche Dinge frühzeitig aufzuschnappen?

0
jo135  27.05.2024, 07:45
@MattThomes

Ich würde ein halbwegs modernes Lehrbuch oder Nachschlagewerk empfehlen. Schau dich bei Rheinwerk, O'Reilly oder d.punkt um.

Falls du mehr auf Videos stehst, ist der Java-Channel von Oracle auf YouTube ganz nett.

1

Ich habe das Problem gefunden,

Bsp. Ablauf:

Bild zum Beitrag

Kurz gesagt, deine Bedingung wird niemals true sein, da du die Schleife an der Stelle, an der die Ungleichheit kommt abbrichst. Ändere die Bedingung mal zu

for(... i<= smaller.length(); ...) dann wird immer der letzte Durchlauf deiner Schleife die Ausgabe deiner Methode bewirken.

Um Dir vielleicht meine Herangehensweise zu erklären: Etwas wird nicht geprintet oder nicht ausgeführt, dann muss der Weg dahin ja irgendwelche Abzweigungen oder (Schleifen-)Bedingungen haben, die nicht zutreffen. Somit kam ich dann darauf mal einen Papiertest zu erstellen und siehe da, theoretisches Testen ist gar nicht so verkehrt :D

Grüße

Woher ich das weiß:Studium / Ausbildung
 - (Java, Programmiersprache)

MattThomes 
Beitragsersteller
 26.05.2024, 23:30

Hey, vielen Dank für deine Mühe. Wir hatten das Problem schon gefunden. Ich hatte die Datei quasi falsch abgetippt, und dadurch gab es von der Methode auch keine Ausgabe, weil die Strings bis zum letzten Vergleich "gleich" waren. Trotzdem danke ich dir für deine Mühe. Eine coole Idee, um sich Schleifen zu visualisieren! LG

0