2016-04-13 4 views
0

Ich mache ein Caesar-Chiffre-Programm in Java. Ich benutzte die switch-Anweisung und ich habe nur ein Problem, wenn ich meinen vollen Namen schreibe, wird es keinen Platz zwischen meinem ersten und letzten geben.Wie füge ich einen Platz zu meiner switch-Anweisung hinzu?

import java.util.*; 

public class caesarCipher { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Write your name:"); 
     String name = in.nextLine(); 
     System.out.println("The Encryption for your name:"); 

     for (int i = 0; i < name.length(); i++) { 

      switch (name.charAt(i)) { 
       case 'A': 
       case 'a': 
        System.out.print("E"); 
        break; 
       case 'B': 
       case 'b': 
        System.out.print("Y"); 
        break; 
       case 'C': 
       case 'c': 
        System.out.print("F"); 
        break; 
       case 'D': 
       case 'd': 
        System.out.print("Q"); 
        break; 
       case 'E': 
       case 'e': 
        System.out.print("W"); 
        break; 
       case 'F': 
       case 'f': 
        System.out.print("D"); 
        break; 
       case 'G': 
       case 'g': 
        System.out.print("T"); 
        break; 
       case 'H': 
       case 'h': 
        System.out.print("C"); 
        break; 
       case 'I': 
       case 'i': 
        System.out.print("R"); 
        break; 
       case 'J': 
       case 'j': 
        System.out.print("N"); 
        break; 
       case 'K': 
       case 'k': 
        System.out.print("B"); 
        break; 
       case 'L': 
       case 'l': 
        System.out.print("G"); 
        break; 
       case 'M': 
       case 'm': 
        System.out.print("A"); 
        break; 
       case 'N': 
       case 'n': 
        System.out.print("J"); 
        break; 
       case 'O': 
       case 'o': 
        System.out.print("X"); 
        break; 
       case 'P': 
       case 'p': 
        System.out.print("O"); 
        break; 
       case 'Q': 
       case 'q': 
        System.out.print("I"); 
        break; 
       case 'R': 
       case 'r': 
        System.out.print("L"); 
        break; 
       case 'S': 
       case 's': 
        System.out.print("Z"); 
        break; 
       case 'T': 
       case 't': 
        System.out.print("M"); 
        break; 
       case 'U': 
       case 'u': 
        System.out.print("P"); 
        break; 
       case 'V': 
       case 'v': 
        System.out.print("S"); 
        break; 
       case 'W': 
       case 'w': 
        System.out.print("H"); 
        break; 
       case 'X': 
       case 'x': 
        System.out.print("K"); 
        break; 
       case 'Y': 
       case 'y': 
        System.out.print("V"); 
        break; 
       case 'Z': 
       case 'z': 
        System.out.print("U"); 
        break; 
      } 
     } 
    } 
+0

Ich wette, dass Kopieren/Einfügen wirklich schmerzhaft war. – f1sh

Antwort

2

Da Sie eine case für jeden Buchstaben, aber nicht für einen Raum, wird es nur während des Verschlüsselungsprozesses runterfallen. Sie könnten eine default am Ende der switch-Anweisung hinzufügen, die nur den Brief ausgibt, ohne ihn zu verschlüsseln. Dies würde dann auch den Raum erfassen.

// ... 
case 'Z': 
case 'z': 
    System.out.print("U"); 
    break; 
default: 
    System.out.print(name.charAt(i)); 
    break; 
+0

Dies ist eigentlich eine sehr elegante Art, es zu tun. – dambros

+1

Ich habe gewählt, aber ich würde keinen Standardfall machen Ich würde nur einen Raumfall machen, weil Sie nicht wissen, wie das Verhalten für Interpunktionen und andere Symbole sein soll. Potenzial, das Verhalten mit Nebenwirkungen zu verändern. – StackFlowed

0

Sie möchten keinen Standardfall verwenden, um ein Leerzeichen zu behandeln, weil dann alle anderen Symbole, die Sie nicht behandelt haben, durch ein Leerzeichen dargestellt werden.

einfach Ihr gleiches Verfahren zur Handhabung von Zeichen weiter:

case ' ': 
    System.out.print(" "); 
    break;