String Vergleich

Diskutiere String Vergleich im Hausaufgaben Bereich.
Kirby_Sike

Kirby_Sike

Beim bearbeiten folgender Aufgabe komme ich einfach nicht weiter, könnte mir jemand einen Tipp geben wie ich die Probleme realisiere :) Danke im Voraus.

Kommen wir zuerst zur Aufgabenstellung: Es werden über die Tastatur zwei Zeichenketten eingelesen. Die erste Zeichenkette entspricht dem Originalstring. Für die zweite Zeichenketten soll Ihr Programm nun ausgeben, ob sie durch ein zyklisches Verschieben des Originalstring zustande kommen kann und falls ja, um wie viele Zeichen dieser (nach rechts) verschoben werden müsste. Kann die zweite Zeichenkette durch ein zyklisches Verschieben des Originalstrings erzeugt werden, so soll das Programm ausgeben, um wie viele Zeichen (nach rechts) verschoben werden muss, damit aus der zweiten Zeichenkette der Originalstring entsteht.
Kann die zweite Zeichenkette nicht durch ein zyklisches Verschieben des Originalstrings erzeugt werden, so soll das Programm den Wert -1 ausgeben.

Nun zu meinem Problem:

Wir haben eine Testumgebung von der Uni bekommen, in welcher 5 Tests ausgeführt werden. 3 dieser 5 Tests leuchten bei meinem Programm grün, soweit so gut. Jedoch sind immer noch 2 Tests rot und mir fällt einfach nicht ein wie ich das implementieren könnte :(

Beim ersten Test werden zwei Strings eingelesen, welche nicht abbildbar sind. Der Test erwartet hier eine -1 als Ausgabe.
Beim zweiten Test werden zwei Strings eingelesen, welche nicht verschoben wurden somit gleich sind.(Habs mal probiert aber mein Ansatz ist scheinbar ein Schuss in den Ofen)

Java:
//import java.io.*;
import java.util.Scanner;

public class Zyklisch {
        
    
     public static void main(String[] args) {
          Scanner sc = new Scanner(System.in);
              String Str1 = sc.next();
              String Str2 = sc.next();
              int index = (Str1 + Str1).indexOf(Str2);
              
              if(Str1 == Str2){
                  System.out.println(0);
              }
              if(Str1.length() != Str2.length()) {
                  System.out.println(-1);
              }
              if (Str1.length() == Str2.length() && index > -1) {
                int offset= (Str1.length() - index) % Str1.length();
                System.out.println(offset);
              }
            sc.close();
        }
}
 
J

JustNobody

Strings werden, so wie alle Objekte, mit equals aufgerufen. Ein == würde nur die Referenzen vergleichen.
 
Kirby_Sike

Kirby_Sike

Das hatte ich ebenfalls probiert, jedoch gibt das Programm dann trotzdem -1 aus.
 
J

JustNobody

Was genau hast du dann als Code gehabt? Was genau hast Du beim Test eingegeben?

Wenn man Deinen Code nimmt und den String-Vergleich mit equals macht und zwei gleich lange Zeichenketten eingibt, dann wird kein -1 ausgegeben.

Wenn keine zwei gleich langen Zeichenketten eingegeben werden, dann wird aber natürlich -1 ausgegeben.
 
Kirby_Sike

Kirby_Sike

Ich glaube du hast mich etwas missverstanden :) Bei gleich langen Zeichenketten weiß ich dass er nicht -1 ausgibt, jedoch möchte ich gerne eine Abfrage um zu testen ob die Strings exakt gleich sind und somit keine Verschiebung vorliegt :D
 
Kirby_Sike

Kirby_Sike

Diese Abfrage hatte ich ausprobiert jedoch wird trotzdem -1 ausgegeben:
Java:
if(Str1.contentEquals(Str2)) {
                  System.out.println(0);
              }
 
Kirby_Sike

Kirby_Sike

Ein weiteres Problem, ich wüsste nicht wie ich eine Abfrage machen soll dass die Strings nicht abbildbar sind.

Beispielsweise mit dein Eingaben:
Praxistest
xistesPtra
 
Kirby_Sike

Kirby_Sike

Fehlt nur noch der Test der zeigt dass sie exakt gleich sind und es keine Verschiebung existiert
 
Kirby_Sike

Kirby_Sike

Ich glaube ich habe die Ursache des Problems gefunden, jedoch kenne ich dazu keinen Lösungsansatz. Mein Programm kann nicht 2 Wörter in einen String einlesen welche durch ein Leerzeichen getrennt sind
 
J

JustNobody

Ja, das die Eigenart, wenn man next() nutzt. Aber Scanner bietet ja noch mehr Methoden. Evtl. willst Du nextLine() nutzen?

Und wenn Du es gelöst hast: Evtl. einfach auch die Lösung teilen für den Fall, dass noch jemand anderes ein ähnliches Problem haben sollte?
 
Thema: 

String Vergleich

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben