2016-10-18 3 views
0

Я пытаюсь сделать Encryptor, используя несколько основополагающих принципов кода, которые мы узнали в школе. Мне удалось куда-то (я думаю), но по какой-то причине мне кажется, что эта ошибка "String index out of range: 53". Может ли кто-нибудь сказать мне, почему?Почему я получаю ошибку «String index out the range: 53»?

public void Encryption() { 
    String Password = "CodingIsHard"; 
    String answer = ""; 
    for (int i = 0; i < Password.length(); i++) { 
     answer = Character.toString(Password.charAt(i + '5')); 

    } 
    System.out.println(answer); 
} 

public static void main(String[] args) { 
    PasswordGenerator GP = new PasswordGenerator(); 
    GP.Encryption(); 
} 
+1

потому что i + '5', нет? –

+1

NB: одиночные кавычки ухудшают ситуацию –

+0

'' 5'' является символом ASCII со значением 0x35 = 53 –

ответ

2

'5' - персонаж, а не номер пять. В ASCII символ 5 имеет значение 53, поэтому, когда i равно нулю, вы пытаетесь получить доступ к индексу 0 + 53, который находится за пределами строки. Вероятно, вы захотите переместить дополнение за пределами скобок charAt().

1

Вы добавляете '5' к индексу можно найти при помощи charAt(), измените код:

public void Encryption() { 
    String Password = "CodingIsHard"; 
    String answer = ""; 
    for (int i = 0; i < Password.length(); i++) { 
     answer = Character.toString(Password.charAt(i) + '5'); 

    } 
    System.out.println(answer); 
} 

public static void main(String[] args) { 
    PasswordGenerator GP = new PasswordGenerator(); 
    GP.Encryption(); 
} 
0

Будьте осторожны при использовании Шара. Ваша строка «CodingIsHard» имеет только 12 букв, и сумма, которую вы делаете внутри цикла For, может сделать это число выше, чем количество букв в вашей строке. Например, если i = 10, и вы суммируете 5, i = 15. И у вас нет позиции 15 в 12-строчной строке! Кроме того, ваш «5» рассматривается Java в его значении ASCII, 53. Рассмотрим использование целочисленного значения (если это не ваше намерение).