2016-12-11 3 views
1

Я пытаюсь написать сценарий, который шифрует простой текст и добирается до сих пор, что он может работать. У меня есть переменное смещение, которое имеет диапазон, который увеличивается буква. Метод шифрования проходит через строку до тех пор, пока она есть, и увеличивает все заглавные буквы столько, сколько говорит смещение. Все до сих пор. Но я борюсь с передачей значений для обоих методов шифрования. Я могу легко передать int в contructor с созданием экземпляра, но это не работает для метода.Передача строки методу в Java

public class Caesar { 

    int offset; 

    public int kryptograph(int offset){ 
     return this.offset=offset; 
    } 

    public String encrypt(String klartext) { 
     int wl = klartext.length()-1; 
     String text = null; 

     for(int i = wl; i >= 0; i++){ 
      if (Character.isUpperCase(klartext.charAt(i))){ 
       text += klartext.charAt(i)+kryptograph(offset); 
      } 
      else { 
       text += klartext.charAt(i); 
      } 
     } 
     return text; 
    } 

    /*public String decrypt(String text2) { 
     ; 
    }*/ 

    public static void main(String[] args) { 

     Caesar o = new Caesar(); 
     o.kryptograph(7); 
     Caesar k = new Caesar(); 
     k.encrypt("TEST"); 

    } 

} 

Я искал некоторые другие учебники, но не смог найти решение, похожее на мое. Так что нечего сравнивать.

Edit:

Это исключение я получаю:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
    at java.lang.String.charAt(String.java:658) 
    at javaapplication25.Caesar.encrypt(Caesar.java:16) 
    at javaapplication25.Caesar.main(Caesar.java:35) 
C:\Users\Kendel\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 
+1

В чем проблема? Что происходит, когда вы пытаетесь скомпилировать/запустить/... код? – UnholySheep

+2

'k.encrypt (" TEST ");' правильно .... В чем проблема, точно? –

+0

Я не понимаю вопроса. – Gendarme

ответ

3

вас источник исключения - вы начинаете перебирать из п-1 элемент, а затем вы увеличиваем переменную i так что вы пытаются получить символ в позиции n, что приводит к этому исключению.

Попробуйте заменить свой код с этим:

public class Caesar { 

    private final int offset; 

    public Ceasar(int offset){ 
     this.offset=offset; 
    } 

    public String encrypt(String klartext) { 
    StringBuilder text = new StringBuilder(); 

    for(int i = klartext.length()-1; i >=0; i--){ 
     char value = klartext.charAt(i); 
     if (Character.isUpperCase(value)){ 
      text.append(value + kryptograph(offset)); 
     } else { 
      text.append(value); 
     } 
    } 
    return text.toString(); 
    } 

    /*public String decrypt(String text2) { 
     // to be implemented 
    }*/ 

    public static void main(String[] args) { 
     Caesar o = new Caesar(7); 
     o.encrypt("TEST"); 
    } 

} 

Смещение должно быть окончательным и привязан к примеру Ceasar, так что каждый экземпляр класса Ceasar всегда будет код и decone таким же образом.

+0

И исправить приращение цикла (или, точнее, декремент) –

+1

@ Хорошая точка :) Исправлено. – Beri

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