String Vergleich

Kirby.exe

Top Contributor
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();
        }
}
 
K

kneitzel

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

kneitzel

Gast
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.exe

Top Contributor
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.exe

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

Kirby.exe

Top Contributor
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.exe

Top Contributor
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
 
K

kneitzel

Gast
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?
 

Neue Themen


Oben