Verschlüsselungsalgorithmus

pureGewalt

Mitglied
Hallo guten Abend zusammen,

ich sitze jetzt leider schon eine Weile an einem Code für einen Verschlüsselungsalgorithmus, bei dem ich jeden Buchstaben mit seinem Nachfolger tauschen soll, also aus A -> B, a -> b.

Das hatte ich soweit hinbekommen hier mal mein code bis jetzt :

public static void main(String[] args) {

//Aufrufen des Scanners
Scanner in = new Scanner(System.in);

//Variablen Deklaration
String eingabe;
String ausgabe = ""; //leerer String


//Benutzereingabe
System.out.println("Bitte geben Sie eine Zeichenkette ein: ");
eingabe = in.nextLine();

for(int zeichenZaehler = 0; zeichenZaehler < eingabe.length(); zeichenZaehler++) {

char neuerString = eingabe.charAt(zeichenZaehler);
//(char) für Cast operator das das folgende in diesen Typ umgewandelt werden soll
ausgabe = ausgabe + (char) (neuerString + 1);

}

System.out.println(ausgabe);

in.close();

}//ende von main

}//ende von Verschluesseln

Doch beim Testen ist mir etwas aufgefallen, nämlich wenn ich ein Z oder z eingebe dann kommt entweder [ { als Ausgabe, und ich verstehe nicht wie ich das ändern kann. Kleine idee: mit if(neuerString == 'Z') dann mit einem Syso == 'A', aber das hat bei mir nicht geholfen die anderen wurden immer noch mit ausgeben. Achja und wenn ich das Leerzeichen mache kommt immer ein '!' was ganz logisch ist, ist ja auch der Nachfolger, aber ich verstehe nicht wie ich denn diese Ausnahmen mache das es eben genau bei den Zeichen nicht passiert.
freue mich über jegliche Hilfe oder gedenkanstöße!

schönen Abend :)
 

Robat

Top Contributor
Naja du hattest prinzipiell schon den richtigen Gedanken. Das Leerzeichen kannst du mit einer if-Abfrage abfragen. Z/z könntest du auch separat noch mal abfragen. Ganz allgemein kannst du mittels Character#isLetter schauen, ob es sich überhaupt um einen Buchstaben handelt.
 
X

Xyz1

Gast
Hier bitte ich habe es so einfach wie möglich gehalten:
Java:
import java.util.ArrayList;
import java.util.Scanner;

public class Verschluesseln {
    public static void main(String[] args) {
        ArrayList<Character> zeichen = new ArrayList<>();
        for (int i = 32; i <= 126; i++) {
            zeichen.add((char) i);
        }

        //Aufrufen des Scanners
        Scanner in = new Scanner(System.in);
        //Benutzereingabe
        System.out.println("Bitte geben Sie eine Zeichenkette ein: ");
        String eingabe = in.nextLine();
        String ausgabe = "";   //leerer String
        String ausgabe2 = "";  //leerer String
        for (char c : eingabe.toCharArray()) {
            if (c - 32 + 1 < zeichen.size()) {
                ausgabe = ausgabe + (zeichen.get(c - 32 + 1));
            } else {
                ausgabe = ausgabe + (zeichen.get(0));
            }
        }
        System.out.println(ausgabe);

        for (char c : ausgabe.toCharArray()) {
            if (c - 32 - 1 >= 0) {
                ausgabe2 = ausgabe2 + (zeichen.get(c - 32 - 1));
            } else {
                ausgabe2 = ausgabe2 + (zeichen.get(zeichen.size() - 1));
            }
        }
        System.out.println(ausgabe2);

        //Scanner nicht schließen
    }
}


32 bis 126 sind "sichtbare" Zeichen. Du musst prüfen ob Du noch innerhalb des Bereiches bist - und den Scanner nicht schließen.
 

pureGewalt

Mitglied
Naja du hattest prinzipiell schon den richtigen Gedanken. Das Leerzeichen kannst du mit einer if-Abfrage abfragen. Z/z könntest du auch separat noch mal abfragen. Ganz allgemein kannst du mittels Character#isLetter schauen, ob es sich überhaupt um einen Buchstaben handelt.
Vielen Dank für deine Hilfe!


Ohje tut mir leid wollte keinen doppelt Post machen, aber ich habe gestern wie verrückt gegooglet und leider diesen Beitrag nicht gefunden, vielen Dank für eure Hilfe ! :)


Hier bitte ich habe es so einfach wie möglich gehalten:
Java:
import java.util.ArrayList;
import java.util.Scanner;

public class Verschluesseln {
    public static void main(String[] args) {
        ArrayList<Character> zeichen = new ArrayList<>();
        for (int i = 32; i <= 126; i++) {
            zeichen.add((char) i);
        }

        //Aufrufen des Scanners
        Scanner in = new Scanner(System.in);
        //Benutzereingabe
        System.out.println("Bitte geben Sie eine Zeichenkette ein: ");
        String eingabe = in.nextLine();
        String ausgabe = "";   //leerer String
        String ausgabe2 = "";  //leerer String
        for (char c : eingabe.toCharArray()) {
            if (c - 32 + 1 < zeichen.size()) {
                ausgabe = ausgabe + (zeichen.get(c - 32 + 1));
            } else {
                ausgabe = ausgabe + (zeichen.get(0));
            }
        }
        System.out.println(ausgabe);

        for (char c : ausgabe.toCharArray()) {
            if (c - 32 - 1 >= 0) {
                ausgabe2 = ausgabe2 + (zeichen.get(c - 32 - 1));
            } else {
                ausgabe2 = ausgabe2 + (zeichen.get(zeichen.size() - 1));
            }
        }
        System.out.println(ausgabe2);

        //Scanner nicht schließen
    }
}


32 bis 126 sind "sichtbare" Zeichen. Du musst prüfen ob Du noch innerhalb des Bereiches bist - und den Scanner nicht schließen.

Oh Gott vielen Dank für die Mühe, jetzt fühle ich mich schlecht, ich hatte nicht erwähnt das wir in der Aufgabe keine Arrays benutzen dürfen :( sorry! Aber vielen dank jetzt kann ich mir die Lösung auch in einem anderen Weg noch verständlicher vor die Augen stellen.

Ich Danke euch noch einmal herzlich Allen !

Liebe Grüße
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben