# Cäser Verschlüsselung



## nuke87 (30. Okt 2016)

Hallo Leute , brauche eure Hilfe.
Ich muss eine Cäser Verschlüsselung machen. Es Muss ganz einfach sein wie es nur geht.
Zunächst muss eine Zahl eingegeben werden die zeigt um wie viel stellen der eingegebene Buchstabe verschoben wird. Dann muss der Buchstabe eingegeben werden, ja und dann wir der verschlüsselte Buchstabe angezeigt. 
Klingt ganz einfach, aber irgendwie habe ich Probleme mit der if Anweisung.
Ach ja noch was, verschlüsselter Buchstabe muss als Großbuchstabe angezeigt werden.

hier mein code der nicht so funktioniert

```
import java.util.*;

public class Caeser{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

       
       
        int verschiebung = sc.nextInt();
        String s1 = sc.next();
        char verschluesseln = s1.charAt(0);

        if (verschluesseln >= 'A' && verschluesseln <= 'Z') {
            return ((verschluesseln - 'A' + verschiebung)%26 +'A');
           
        }

        sc.close();

       
           




    }
}
```


----------



## neoexpert (30. Okt 2016)

Du musst nicht prüfen, ob das Zeichen im gewissem Bereich liegt. Einfach deine Zahl auf das Zeichen darauf addieren.


----------



## nuke87 (30. Okt 2016)

könntest du vielleicht als code darstellen, bin neu in Programmieren.  danke


----------



## neoexpert (30. Okt 2016)

```
char c='X';
        System.out.println("Verschlüsselt:"+(c+=5));
        System.out.println("Entschlüsselt"+(c-=5));
```


----------



## nuke87 (30. Okt 2016)

und wie stelle ich die verschlüsselten Buchstaben groß da, wenn ich den Buchstabe aber klein eingebe


----------



## neoexpert (30. Okt 2016)

Wenn du 'x' hast möchtest du auf einen grossen Buchstaben abbilden? Warum? Was passiert mit grossen Buchstaben des klartextres? Und mit Satzzeichen?


----------



## nuke87 (30. Okt 2016)

Ich muss nur einen einzelnen Buchstaben verschlüsseln , keine ganzen Sätze oder Texte


----------



## neoexpert (30. Okt 2016)

Ja geht doch wenn du den Schlüssel drauf addierst.


----------



## nuke87 (30. Okt 2016)

ja ok , aber wie soll ich denn als Großbuchstabe ausgeben?


----------



## nuke87 (30. Okt 2016)

Hier die Aufgabenstellung, vielleicht habe ich mich nicht so ausgedrückt


Eine einfache und alte Verschlüsselungmethode für Texte ist die Caesar-Verschlüsselung. Ausgangspunkt ist ein Buch- stabe b und ein Schlüssel k ∈ N. Das Verfahren arbeitet so, dass der Buchstabe durch den Buchstaben ersetzt wird, der k Buchstaben weiter im Alphabet erscheint. Dabei ist zu beachten, dass beim “Hinauslaufen“ über Z mit A weiter gezählt wird. Der nächste Buchstabe nach Z ist also A. Beispiel: b = H und k = 1 ergibt als Ergebnis I.

Schreiben Sie ein Java-Programm Caesar, das für einen Schlüssel k mit k ∈ N (also z.B. k = 100) und einen Großbuchsta- ben b den verschlüsselten Großbuchstaben auf dem Bildschirm ausgibt. Die beiden Argumente werden über die Tastatur dem Programm übergeben, zuerst der Schlüssel k in einer Zeile und anschließend der Buchstabe b in einer Zeile.

Die Ausgabe besteht nur aus dem kodierten Resultatbuchstaben zu Beginn der Ausgabezeile gefolgt von einem Zeilenumbruch.

Beispiel: Für die Eingabe

5 X

ist die Ausgabe 
C


----------



## neoexpert (30. Okt 2016)

Guck dir das mal an:


```
import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        char c='a';
        int key=5;
        for(int i=0;i<100;i++,c++)
            System.out.println("klar:"+c+";verchlüsselt:"+(char)(c+key));
      
    }
}
```


----------



## neoexpert (30. Okt 2016)

Achso, dann muss man natürlich doch so machen wie du Oben. Moment...


----------



## neoexpert (30. Okt 2016)

Der Buchstabe A hat den wert 65:

```
char c='A';
System.out.println((int)c);
```


----------



## neoexpert (30. Okt 2016)

Dein program möchte ja ausser dem einen Wert zurückzugeben in einer Funktion die keinen Rückgabe-wert hat (void main)


----------



## nuke87 (30. Okt 2016)

verstehe ich nicht ganz.
kannst du vielleicht den kompletten code zeigen


----------



## neoexpert (30. Okt 2016)

```
import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);



        int verschiebung = sc.nextInt();
        //String s1 = sc.next();
       // char verschluesseln = s1.charAt(0);
        while (true)
        {
            String s1 = sc.next();
            char verschluesseln = s1.charAt(0);
           
            if (verschluesseln >= 'A' && verschluesseln <= 'Z')
            {
                System.out.println((char)((verschluesseln - 'A' + verschiebung) % 26 + 'A'));

            }
        }

        //  sc.close();







    }
}
```


----------



## nuke87 (30. Okt 2016)

ok erst mal vielen dank. aber ein error wegen scanner: unreachable statement
sc.close();


----------



## sascha-sphw (30. Okt 2016)

Tausch mal noch


neoexpert hat gesagt.:


> *while* (*true*)


gegen


neoexpert hat gesagt.:


> *while*(*sc.hasNext()*)


aus.


----------



## nuke87 (30. Okt 2016)

mit while(sc.hasNext())    schliesst sich der scanner gar nicht, also nach Eingabe vom Zeichen , wartet Programm auf weitere Eingaben.


----------



## nuke87 (30. Okt 2016)

Habe jetzt while weggemacht, es geht , aber nach der Eingabe von der verschiebung und verschluesseln schliesst das Programm direkt ohne Ausgabe. bitte bitte leute hilft mir.


```
import java.util.*;

public class Caeser
{

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);

        int verschiebung = sc.nextInt();

            String s1 = sc.next();
            char verschluesseln = s1.charAt(0);


            if (verschluesseln >= 'A' && verschluesseln <= 'Z')
            {
                System.out.println((char)((verschluesseln - 'A' + verschiebung)% 26 + 'A'));
            }
       
        sc.close();
       
    }
}
```


----------



## sascha-sphw (30. Okt 2016)

Was möchtest Du denn? Außer, dass Du die Werte nicht in extra Zeilen eingibst entspricht es doch nun den Anforderungen.


----------



## nuke87 (30. Okt 2016)

das Programm schliesst sofort nach der Eingabe ohne das Ergebnis auszugeben.


----------



## neoexpert (30. Okt 2016)

Vllt Benutzt er Windows Terminal der direkt nach der Eingabe geschlossen wird oder so...
Da muss du dann nochmal etwas einlesen vor dem ende.


----------



## nuke87 (30. Okt 2016)

Ist in Eclipse, schliesst nach Eingabe ohne was aus zu geben


----------



## Cromewell (30. Okt 2016)

Ich habe damals auch mal so etwas geschrieben (ändert aber nur reine Buchstaben, also ohne Sonderzeichen). Du kannst es dir ja mal anschauen:


Spoiler: Code





```
private String encrypt(String text, int shift){
  
    StringBuilder result = new StringBuilder();

    for (int i = 0; i < text.length(); i++){
        char c = text.charAt(i);
        int pos = (int) c;
        if(c >= 'a' && c <= 'z'){
            pos = (pos - 'a' + shift)%26 + 'a';
            c = (char) pos;
            result.append(c);
        }else if(c >= 'A' && c <= 'Z'){
            pos =  (pos - 'A' + shift)%26 + 'A';
            c = (char) pos;
            result.append(c);
        }else if(c == ' '){
            result.append(' ');
        } else {
            output.setText("Wrong input."); //Das ist egal (ändert den Text in einer TextArea...)
        }
    }
    return result.toString();
}
```


----------



## Cromewell (30. Okt 2016)

nuke87 hat gesagt.:


> schliesst das Programm direkt ohne Ausgabe.





nuke87 hat gesagt.:


> *if* (verschluesseln >= 'A' && verschluesseln <= 'Z')


Hast du einen Großbuchstaben eingegeben?


----------

