2015-01-03 5 views
1

В настоящее время я создаю код для шифрования текста на Java с использованием предопределенных символов. Код работает, за исключением того, что я не знаю, как иметь дело с пробелами в моем коде. Когда программа приходит в космос, она, кажется, заканчивается, но я хочу, чтобы она могла читать и шифровать полные предложения. Извинения за плохое объяснение, но, надеюсь, код покажет проблему, которую я испытываю.Как создать шифр в Java

public static final int ASCII_SUB = 96; 
public static final int ASCII_SUB_FOR_SPACE = 32; 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    System.out.println("Enter the text that you would like to cipher:"); 
    Scanner input = new Scanner(System.in); 
    String cipher = input.next(); 
    input.close(); 

    int length = cipher.length(); 

    char encryption[] = createCipher(); 
    String encrypted = encrypt(encryption, cipher, length); 

    System.out.println(encrypted); 


} 

public static char[] createCipher(){ 

    char[] encryption = {'p', 'u', 'y', 'k', 'h', 'q', 'g', 'j', 'l', 
      'i', 'd', 'v', 'b', ' ', 'o', 'c', 'f', 'r', 'e', 't', 'x', 
      'a', 'n', 'z', 'm', 'g', 'w', 's' }; 

    return encryption; 
} 

public static String encrypt(char[] encryption, String cipher, int length){ 

    String lowercaseCipher = cipher.toLowerCase(); 
    char[] characterArray = lowercaseCipher.toCharArray(); 

    char[] test = new char[length]; 
    for(int i = 0; i<length; i++){ 
     if(characterArray[i] == ' '){ 
      test[i] = (char) (characterArray[i] - ASCII_SUB_FOR_SPACE); 
     } 
     else{ 
      test[i] = (char) (characterArray[i] - ASCII_SUB); 
     } 

    char test2[] = new char[length]; 

    for(int i = 0; i<length; i++){ 
     test2[i] = encryption[test[i]]; 
    } 

    String anotherString = new String(test2); 
    return anotherString; 
} 

Когда я вводил что-то вроде «ab aq».

Программа печатает «иу»

Заранее спасибо

+1

Пространство ASCII равно 32, поэтому вычитание 96 приведет к генерации некоторого непечатаемого символа. – fejese

+0

. Я отредактировал программу, добавив инструкцию if else, чтобы попытаться справиться с пробелами, но она по-прежнему заканчивается, когда она достигает символа пробела. – bike3

+2

Ваши имена переменных немного воинственный. Ваш код был бы чище (проще понять), если массив, возвращаемый createCipher(), был назначен переменной с именем «cipher», если текст, который вы читали с консоли, содержался в переменных с именем «plainTextAsString» и «plainTextAsBytes», , если переменная, которую вы называете «test2», была названа «cipherTextAsBytes» и т. д. –

ответ

3

Вместо использования input.next(), который считывает входные данные до следующего пробелу используйте input.nextLine(). Это даст вам полную строку (конечно, без конечного символа).