2015-10-28 2 views
1
package codeCracker; 

public class CodeCracker { 
    private String encrypt; 
    private int encry; 

    public CodeCracker(String encryptmelong) { 
     encrypt = encryptmelong; 
    } 

    public String idolnum() { 
     String in; 
     in = encrypt; 
     in = in.replaceAll("\\D+", ""); 
     encry = Integer.valueOf(in); 
     encrypt = encrypt.replace(in, ""); 
     // System.out.println(encry); 
     return in; 
    } 

    public String encrypt() { 
     // encrypt+=encry; 

     String encrypted = ""; 
     String charen = ""; 
     for (int i = 0; i < encrypt.length(); i++) { 
      charen += encrypt.charAt(i); 
      // System.out.println(charen.charAt(i)); 
     } 
     for (int i = 0; i < charen.length(); i++) { 
      System.out.println(encry); 
      int temp = Integer.parseInt(idolnum()); 
      System.out.println("" + temp + " " + (int) encrypt.charAt(i)); 
      temp = (int) encrypt.charAt(i) + temp; 
      encrypted = encrypted + (char) temp; 
      // System.out.println(encrypted.charAt(i)); 
     } 
     return encrypted; 

    } 

    public String toString() { 
     return encrypt(); 
    } 

    public static void main(String[] args) { 
     CodeCracker code = new CodeCracker("5 encryptme"); 
     System.out.println(code); 
    } 

} 

У меня вопрос о шифровании. Предполагается, что эта программа получит строку и число и увеличит каждый символ по этому номеру. Это не работает. Он правильно принимает номер, но не правильно добавляет символы. Я также получаю ошибку исключения в потоке «основной»: для ввода строки: «»NumberFormatException с простым шифрованием

Exception in thread "main" java.lang.NumberFormatException: For input string: "" at 
    Java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at 
    java.lang.Integer.parseInt(Integer.java:504) at 
    java.lang.Integer.valueOf(Integer.java:582) at 
    codeCracker.CodeCracker.idolnum(CodeCracker.java:15) at 
    codeCracker.CodeCracker.encrypt(CodeCracker.java:34) at 
    codeCracker.CodeCracker.toString(CodeCracker.java:44) at 
    java.lang.String.valueOf(String.java:2854) at 
    java.io.PrintStream.println(PrintStream.java:821) at 
    codeCracker.CodeCracker.main(CodeCracker.java:50) 
+1

Пожалуйста, разместите весь текст исключения stacktrace и укажите для нас, какая строка его выбрасывает. –

+0

Просто догадайтесь, но, похоже, во втором цикле for, когда вы запускаете 'System.out.println (entry);' в первый раз у вас нет 'encry', установленного на что угодно, что может привести к проблема. – Gliderman

+0

Исключение в потоке "основного" java.lang.NumberFormatException: Для входной строки: "" \t на java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) \t в java.lang.Integer.parseInt (Integer.java : 504) \t на java.lang.Integer.valueOf (Integer.java:582) \t на codeCracker.CodeCracker.idolnum (CodeCracker.java:15) \t в codeCracker.CodeCracker.encrypt (CodeCracker.java:34) \t на codeCracker.CodeCracker.toString (CodeCracker.java:44) \t на java.lang.String.valueOf (String.java:2854) \t в java.io.PrintStream .println (PrintStream.java:821) \t на codeCracker.CodeCracker.main (CodeCracker.java:50) –

ответ

1

Это не хорошо:

for (int i = 0; i < charen.length(); i++) { 
     System.out.println(encry); 
     int temp = Integer.parseInt(idolnum()); 
     System.out.println("" + temp + " " + (int) encrypt.charAt(i)); 
     temp = (int) encrypt.charAt(i) + temp; 
     encrypted = encrypted + (char) temp; 
     // System.out.println(encrypted.charAt(i)); 
    } 

Вы звоните idolnum() несколько раз в течение для цикла, в том числе после того, как вы извлекли номер String из исходной строки, и, когда вы сделаете это во второй раз, вы получите для попытки разобрать «". Вместо этого вызовите diolnum() один раз и только один раз и перед циклом for. Затем используйте encry int всякий раз, когда требуется шифрование int.

Обратите внимание, что если бы это был мой проект, я бы организовал его по-другому. Я передал бы только шифрование int классу, а затем разрешал ему шифровать и расшифровывать любые строки, переданные в него. Например:

public class MyCodeCracker { 
    private int encry; 

    public MyCodeCracker(int encry) { 
     this.encry = encry; 
    } 

    public String encrypt(String text) { 
     // use encry to do encrytion 
     return ""; // return encrypted text 
    } 

    public String decrypt(String encryptedText) { 
     // use encry to translate encryptedText to text 
     return ""; // return text 
    } 

    public int getEncry() { 
     return encry; 
    } 

    public static void main(String[] args) { 
     // here get user input 
     // extract out the encryption int 
     // create MyCodeCracker with the int 
     // and then encrypt and decrypt text as needed 
    } 

} 
+0

.......... LOL, поэтому я никогда не инициализировал code.idolnum(); поэтому метод idolnum никогда не запускался –

+0

@GamerGuy: no! Он побежал, но побежал слишком много раз. Пожалуйста, перечитайте мой ответ и, пожалуйста, запустите свой код с помощью отладчика. –

+0

Да, я сделал. Я тоже это изменил. Спасибо за это. Я также никогда не запускал его, чтобы он никогда не менял значение encry. –

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