Verschiebung von Zeichen

Bitte aktiviere JavaScript!
Hallo,
ich will folgendes Programm schreiben:
ich lese zwei Zeichenketten ein, wobei die 1. ein normales Wort ist und die 2. das um eine bestimme Anzahl nach rechts verschobene Original ist.

Ich habe es folgendermaßen gemacht:

Java:
import java.util.Scanner;
public class ZyklischesVerschieben {
    
    public static boolean isgleich(char a[],char b[]) {
        for(int i=0; i<a.length;i++) {
            if(a[i]!=b[i]) return false;
        }
        return true;
    }
    
    public static void main(String [] args) {
        
        Scanner s=new Scanner(System.in);
        String w=s.next();//Zeichenkette normal
        String x=s.next();//Zeichenkette verschoben
        int counter=0; //Anzahl der Verschiebungen
        
        char [] a=new char[w.length()];
        for(int i=0;i<w.length();i++) {
            a[i]=w.charAt(i);
        }
        char [] b=new char[w.length()];
        for(int i=0;i<w.length();i++) {
            b[i]=x.charAt(i);
        }
        
        while(!(isgleich(a,b))) {
            for(int i=0;i<w.length()-1;i++) {
                char temp=b[i+1];
                b[i+1]=b[i];
                b[i]=temp;
            }
            counter++;
        }
        
        System.out.println(counter);
    }
}
Wäre das ok so oder habe ich das vllt zu kompliziert bzw. damit schlecht programmiert?
 
A

Anzeige




Schau mal hier —> (hier klicken)
Warum nicht so?
Java:
public static void main(String[] args) {
  Scanner s = new Scanner(System.in);
  String w = s.next();
  String x = s.next();
  System.out.println(x.indexOf(w));
}
Außerdem: Kannst du mal ein Beispiel geben? Wenn ich es mit den Eingaben "Hallo" und "abcHallo" ausprobiere, kommt dein Programm in eine Endlosschleife. Was genau meinst du mit "nach rechts verschoben"?
 
Sorry z.b: Apfel und felAp.
Es ging mir auch darum, das Arrayverwalten zu üben. Man kann ja nicht einfach Zeichen in einem String umordnen oder?
 
Du brauchst hierfür keine Arrays. Weder musst du den String in ein Array überführen, noch musst du Arrayeinträge hinundherkopieren.
 
Ja ich sehe jetzt auch, dass es mit deinem Vorschlag viel einfacher geht.
Nochmal zu meinem Programm. Ich verstehe gerade nicht mehr, warum im Beispiel Apfel und felAp die Zahl der Verschiebungen counter=3 ist.
In dem 1. while-Schleifen-Druchlauf bekomme ich pfelA und dann beim 2. felAp. Wo kammt der 3. Durchlauf her?
 
Mein Code-Vorschlag ist für dieses Problem gar nicht anwendbar, bzw. er löst das Problem nicht, weil ich davon ausgegangen bin, dass du mit "nach rechts verschieben" etwas anderes meintest.
 
Ja doch egtl. So dann ungefähr:
Java:
    String eins=ein.next();
    String zwei=ein.next();
    String zusammen=eins+zwei;
        
    boolean b= zusammen.contains(zwei);
    
    if(b){
        System.out.println(zusammen.indexOf(zwei));
    }
 
Wenn Du das if weglässt, wird ja nichts mehr geprüft, dann setzt Du ja lediglich ein Wort aus zwei anderen zusammen.
 
Du willst wissen, ob ein Wort w durch wiederholte Anwendung einer Rechtsrotation aus einem Wort x entstanden ist, richtig?
 
Java:
public static void main(String[] args) {
  Scanner s = new Scanner(System.in);
  String original = s.next();
  String verschoben = s.next();
  int idx = (original + original).indexOf(verschoben);
  if (original.length() == verschoben.length() && idx > -1) {
    int verschiebung = (original.length() - idx) % original.length();
    System.out.println(verschiebung);
  }
}
 
Danke für deinen Lösungvorschlag httpdigeist:)
Kann mir vllt trotzdem jmd noch meinen Denkfehler in meinem Programm erklären:
"
Nochmal zu meinem Programm. Ich verstehe gerade nicht mehr, warum im Beispiel Apfel und felAp die Zahl der Verschiebungen counter=3 ist.
In dem 1. while-Schleifen-Druchlauf bekomme ich pfelA und dann beim 2. felAp. Wo kammt der 3. Durchlauf her? "
 
A

Anzeige




Vielleicht hilft dir das hier weiter: (klicke hier)
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben