2013-11-26 18 views
2

Я хочу создать метод, который будет использовать фразу и число, взятое из args. Число форм args сдвигает буквы фразы от args количество букв, число которых.Создание метода цезарного шифрования с использованием java

пример Javac Caesar.java Java Цезарь ABCD 1

конечный результат должен напечатать BCDE

мой метод дает мне проблемы .. помощь?

private String encode(String num, int x) 
{ 
    char[] charnum = args[1]; 
    for (x = 0; x <= charnum.length; x++) 
    { 
     charnum = charnum + x; 
    } 
    return new String(charnum); 
} 

Что мне делать? Точно так же я должен написать метод декодера. я собирался иметь один и тот же набор вверх, за исключением последствий для изменения контура для

charnum = charnum - x; 

Моя проблема заключается в том, что, когда я пытаюсь скомпилировать, я получаю следующие ошибки

symbol : variable argslocation: class Lab041 
    char[] charnum = args[1]; 
        ^

Lab041.java:17: operator + cannot be applied to char[],int 

     charnum = charnum + x; 
         ^

2 errors 

как я исправлю это? и является ли мое предположение для метода декодирования правильным?

ответ

2

Я хотел бы начать с более простым методом кодирования, как этот

private static String encode(String num, int x) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (char c : num.toCharArray()) { 
    sb.append((char) (c + x)); 
    } 
    return sb.toString(); 
} 

Затем, чтобы использовать его, я хотел бы использовать основной метод как этого

public static void main(String[] args) 
{ 
    if (args == null || args.length < 2) { 
    System.out.println("Not enough arguments."); 
    System.exit(1); 
    } 
    int val = Integer.valueOf(args[args.length - 1]); 
    for (int i = 0; i < args.length - 1; i++) { 
    if (i != 0) { 
     System.out.print(' '); 
    } 
    System.out.print(encode(args[i], val)); 
    } 
    System.out.println(); 
} 
2

Charnum - это массив символов. Вы хотите:

for (i = 0; i <= charnum.length; i++) { 
    charnum[i] = (char) (charnum[i] + x); 
} 

Это относится к элементу этого массива.

Также имейте в виду, что у вас нет безопасных для охранников, если вы идете на «г»

Также проверьте это: Simple caesar cipher in java

+0

Я сделал то, что вы сказали .... и компьютер вернул возможную потерю точности ошибки Я также знаю о проблеме z. – WeekzGod

+0

Попробуйте наброситься на символ. –

+0

http://stackoverflow.com/questions/19108737/shift-ciphercaesar-cipher-in-java?rq=1 –

1

Java CMD строки арг является массив строк, вы можете» т просто назначить его на массив символов, а строка класс имеет метод toCharArray()

также использовать тип данных факта гольца можно манипулировать с помощью оператора сложения, например:

char c = 'a'; 
c = (char)(c + 1); // c is now 'b' 
+0

работала техника toCharArray, но я не следую второму совету. как именно я это реализую? – WeekzGod

1

класса шифра цезаря {

private final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; 

public 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 = this.ALPHABET.charAt(keyVal); 

      cipherText += replaceVal; 

     } 

     return cipherText; 

} 

public String decrypt(String cipherText, int shiftKey) 

{ 

     cipherText = cipherText.toLowerCase(); 

     String plainText=""; 

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

     { 

      int charPosition = this.ALPHABET.indexOf(cipherText.charAt(i)); 

      int keyVal = (charPosition-shiftKey)%26; 

      if(keyVal<0) 

      { 

        keyVal = this.ALPHABET.length() + keyVal; 

      } 

      char replaceVal = this.ALPHABET.charAt(keyVal); 

      plainText += replaceVal; 

     } 

     return plainText; 

} 

}

Смежные вопросы