Javaprogramm nach ausführung des gesammten Cods neu beginnen lassen

Lucaaa

Bekanntes Mitglied
Hallo!
ich habe folgendes Problem: ich habe ein Programm geschrieben (eclipse) das Text mit der Rot-Verschlüsselung (oder Cäsarverschlüsselung) verschlüsselt.
Programmausgabe:
zu verschlüsselnden Text eingeben:
"Beispieltext"
Um wie viele Stellen soll verschoben werden?
22
Verschlüsselter Text:
"lwedjfdlsjsoijfd"
Originaltext:
"Beispieltext"

jetzt will ich aber, dass das Programm dann eine Abfrage macht ob beendet werden soll und wenn nein wieder von vorne Anfängt. Habe schon versucht das ganze in eine Schleife zu schreiben und mit einem Switch zu machen kommen aber immer Fehler.
Hier der Code:
Java:
import java.util.Scanner;

public class rotcrypt {

   public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
     System.out.println("zu verschlüssender Text:");
     String text = scanner.nextLine();

     System.out.println("Um wie viele Stellen soll verschoben werden (1 bis 127)");
     int offset = scanner.nextInt();
     int anzahlstellen = offset;
     if (offset >= 1 && offset <= 127) {
       char[] meinArray = text.toCharArray();
       char[] meinNeuesArray = verschluesseln(offset, meinArray);
       System.out.println("\nVerschlüsselter Text: (um " + anzahlstellen + " verschoben)");
       for (int i = 0; i < meinNeuesArray.length; i++) {
         System.out.print(meinNeuesArray[i]);
       }
       System.out.println("\n");
       meinNeuesArray = entschlüsseln(offset, meinNeuesArray);
       System.out.println("\nOriginalText:");
       for (int i = 0; i < meinNeuesArray.length; i++) {
         System.out.print(meinNeuesArray);
       }
       System.out.println("\n");
       scanner.close();
     } else
       System.err.println("Ungültiger Wert die Verschiebung muss zwischen 1 und 127 liegen");
   }

   public static char[] verschluesseln(int offset, char[] charArray) {
     char[] cryptArray = new char[charArray.length];
     for (int i = 0; i < charArray.length; i++) {
       int verschiebung = (charArray + offset) % 128;
       cryptArray[i] = (char) (verschiebung);
     }
     return cryptArray;
   }
   
   public static char[] entschlüsseln(int offset, char[] charArray) {
     char[] cryptArray = new char[charArray.length];
     int verschiebung;
     for (int i = 0; i < charArray.length; i++) {
       if (charArray - offset < 0)
         verschiebung = charArray - offset + 128;
       else
         verschiebung = (charArray - offset) % 128;
       cryptArray[i] = (char) (verschiebung);
     }
     return cryptArray;
   }
}
 
Zuletzt bearbeitet von einem Moderator:
Hallo Lucaaa,
spontan würde ich sagen, dass dir eine While Schleife helfen könnte.
Hier mal auf die schnelle ein kleiner Denkanstoß.

Liebe Grüße und schönen Restabend
-DjangoDieMango

P.s: Programmcode bitte immer in Code-Tags schreiben, danke!
Java:
boolean test = true; // Variable für While Schleife
while (test == true){ // Solange Variable test = true ; While Schleife läuft
   /// Mach irgendwas
            Scanner test =newScanner(System.in);
            System.out.println("beenden?  ja\nein ?");
            String antwort = test.nextLine();

  if(antwort.equals(nein)){ //Abfrage ob die Antwort nein war
   test = false; // wenn Antwort = Nein  => setze Variable auf false => Ende derWhile Schleife
  }else{
          //Mach was anderes
       }
}
 
Zuletzt bearbeitet:
@DjangoDieMango Abfragen auf booleans, wie etwa test == true sind zwar vollkommen richtig, aber auch etwas unnötig und erschweren den Lesefluss. Stattdessen lieber:
Java:
if(test) { // anstatt test==true

}
// und umgekehrt:
if(!test) { // anstatt test==false bzw. anstatt test != true

}
 
Erstmal Danke für eure Hilfe aber ich erhalte (wie bei allem was ich versucht habe) die Fehlermeldung, dass der Scanner die Zeile nicht finden kann,nachdem der verschlüsselte Text ausgegeben wurde:
 
so

Java:
import java.util.Scanner;

public class rotcrypt {
   public static void main(String[] args)  {
     boolean test = true;
     while (test == true) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("zu verschlüssender Text:");
       String text = scanner.nextLine();
       
       System.out.println("Um wie viele Stellen soll verschoben werden (1 bis 127)");
       int offset = scanner.nextInt();
       int anzahlstellen = offset;
       if (offset >= 1 && offset <= 127) {
         char[] meinArray = text.toCharArray();
         char[] meinNeuesArray = verschluesseln(offset, meinArray);
         System.out.println("\nVerschlüsselter Text: (um " + anzahlstellen + " verschoben)");
         for (int i = 0; i < meinNeuesArray.length; i++) {
           System.out.print(meinNeuesArray[i]);
         }
         System.out.println("\n");
         meinNeuesArray = entschlüsseln(offset, meinNeuesArray);
         System.out.println("\nOriginalText:");
         for (int i = 0; i < meinNeuesArray.length; i++) {
           System.out.print(meinNeuesArray[i]);
         }
         System.out.println("\n");
         scanner.close();
       } else
         System.err.println("Ungültiger Wert die Verschiebung muss zwischen 1 und 127 liegen");
     }
     Scanner reader = new Scanner(System.in);
     System.out.println("Weiter [J/N] ?");
     String antwort = reader.nextLine();
     antwort.toLowerCase();
     if (antwort == "n") {
       test = false;
       System.exit(0);
     }
     reader.close();
   }

   public static char[] verschluesseln(int offset, char[] charArray) {
     char[] cryptArray = new char[charArray.length];
     for (int i = 0; i < charArray.length; i++) {
       int verschiebung = (charArray[i] + offset) % 128;
       cryptArray[i] = (char) (verschiebung);
     }
     return cryptArray;
   }

   public static char[] entschlüsseln(int offset, char[] charArray) {
     char[] cryptArray = new char[charArray.length];
     int verschiebung;
     for (int i = 0; i < charArray.length; i++) {
       if (charArray[i] - offset < 0)
         verschiebung = charArray[i] - offset + 128;
       else
         verschiebung = (charArray[i] - offset) % 128;
       cryptArray[i] = (char) (verschiebung);
     }
     return cryptArray;
   }
}
 
Zuletzt bearbeitet von einem Moderator:
..... die Fehlermeldung, dass der Scanner die Zeile nicht finden kann,nachdem der verschlüsselte Text ausgegeben wurde:
Wie lautet die Fehlermeldung? (am besten per Copy&Paste hier im Forum posten)

Anmerkungen zu deinem Code:
Klassennamen werden groß geschrieben
while(test == true) kann gekürzt werden auf while(test). Der Vergleich auf == true erzeugt wieder nur einen boolschen Ausdruck.

Java:
....
       } else
         System.err.println("Ungültiger Wert die Verschiebung muss zwischen 1 und 127 liegen");
     }
....
      if (charArray[i] - offset < 0)
         verschiebung = charArray[i] - offset + 128;
       else
         verschiebung = (charArray[i] - offset) % 128;
.....
Auch wenn es der Compiler erlaubt, verwende in solchen Fällen ebenfalls die Klammern. Schon oft genug erlebt das einer der Zweige ergänzt wurde ohne Klammern zu setzen -> unvorhergesehenes Verhalten.

if (antwort == "n") { Strings werden mit equals nicht mit == verglichen
 
Die Fehlermeldung:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at rotcrypt.main(rotcrypt.java:11)
 

Zurück
Oben