# String Vergleich



## Kirby.exe (12. Nov 2019)

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)


```
//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();
        }
}
```


----------



## kneitzel (12. Nov 2019)

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


----------



## Kirby.exe (12. Nov 2019)

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


----------



## kneitzel (12. Nov 2019)

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 (12. Nov 2019)

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


----------



## Kirby.exe (12. Nov 2019)

Diese Abfrage hatte ich ausprobiert jedoch wird trotzdem -1 ausgegeben:

```
if(Str1.contentEquals(Str2)) {
                  System.out.println(0);
              }
```


----------



## Kirby.exe (12. Nov 2019)

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 (12. Nov 2019)

Ok die nicht Abbildbarkeit habe ich gelöst


----------



## Kirby.exe (12. Nov 2019)

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


----------



## Kirby.exe (12. Nov 2019)

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


----------



## Kirby.exe (12. Nov 2019)

Problem gelöst trotzdem danke


----------



## kneitzel (12. Nov 2019)

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?


----------



## Kirby.exe (12. Nov 2019)

Jap ich hab es mit nextLine gelöst


----------

