2017-12-16 6 views
0

Ich versuche, die Verschlüsselungsfunktion ignorieren die weißen Leerzeichen und die Symbole zwischen den Worten aus dem UserInput. Sollte ich isWhitespace verwenden oder was? und wie implementiert man das?Caesar Chiffre mit Leerzeichen unverändert

Die Ausgabe für dieses Programm ist völlig korrekt, es verschiebt jeden Buchstaben auf die nächsten 7. aber es akzeptiert keine Verschiebung von zwei Wörtern, die durch Leerzeichen oder Koma getrennt sind.

Ich bin neu in Java atemberaubende Welt & Ich genieße es wirklich! Daher ist dies meine dritte Woche seit ich angefangen habe.

import java.util.Scanner; 

public class Test_Cipher{ 
    public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; 

    public static String encrypt(String plainText, int shiftKey) { 
     plainText = plainText.toLowerCase(); 
     String cipherText = ""; 
     for (int i = 0; i < plainText.length(); i++) { 
      int charPosition = ALPHABET.indexOf(plainText.charAt(i)); 
      int keyVal = (shiftKey + charPosition) % 26; 
      char replaceVal = ALPHABET.charAt(keyVal); 
      cipherText += replaceVal; 
     } 
     return cipherText; 
    } 
} 
+0

Sie wollen nicht ** ** alle Zeichen transponieren, die Sie über for-Schleife in die kommen, so werden Sie brauche eine if-Bedingung dort. Warum versuchst du nicht zuerst, dies selbst zu erstellen und zu sehen, was du dir vorstellen kannst? Bitte arbeiten Sie auch daran, Code zu veröffentlichen, der besser formatiert ist. –

Antwort

0

Es gibt zwei Möglichkeiten, dies zu tun: Entweder schaffen ein positives Spiel für das Zeichen oder einem negativen. In der Positiv-Match-Variante überprüfen Sie zuerst, ob plainText.charAt(i) ein Zeichen ist, das Sie behalten möchten, und fügen Sie es in diesem Fall den cipherText und continue mit der Schleife hinzu.

In der anderen können Sie überprüfen, ob indexOf-1 zurückgibt, die anzeigen, dass das Alphabet das Zeichen nicht enthält. In diesem Fall tun Sie das Gleiche: fügen Sie es hinzu und fahren Sie fort. Dies ist die gemeinsame Methode, die ich habe für die klassische Ceasar „Spiel“ gesehen Chiffre:

// introduce a local variable, you don't want to perform charAt twice 
char c = plainText.charAt(i); 
int charPosition = ALPHABET.indexOf(c); 
// if charPositions is -1 then it is not found 
if (charPosition == -1) { // or define a constant NOT_FOUND = -1 
    cipherText += c; 
    // continue with the for loop 
    continue; 
} 
+0

Es funktionierte. Danke einen Schlag! –

Verwandte Themen