2015-02-11 4 views
0

Я написал код для цезарного шифрования, но он не работает ... Пожалуйста, помогите мне решить эту проблему.Мне нужна помощь в понимании java.lang.StringIndexOutOfBoundsException

import java.io.IOException; 
import java.util.Scanner; 

public class test1 { 

    public static void main(String[] args) throws IOException { 
     System.out.println("enter the String"); 
     StringBuffer str = new StringBuffer(new Scanner(System.in).nextLine()); 
     System.out.println("encrypting the String . . ." +str); 

     for(int j=0; j<str.length(); j++){ 
      for(int i=0; i<256; i++) { 
       if((char)i == str.charAt(j)){ 
        str.setCharAt(j, (char)(i+3)); 
       } 
      } 
     } 
     System.out.println("encrypted String . . ."); 
    } 
} 

Здесь ваши работы решения и не более java.lang.StringIndexOutOfBoundsException теперь есть еще одна проблема возникла. , , , Я пробовал разные входы, но все время он отвечает на тот же ответ: ??????

+3

'J <= str.length()' Индекс равны 0 на основе. –

+0

ваше предложение решило мою проблему. , но теперь здесь произошла другая ошибка, когда я запускаю программу, она показывает ответ ????? Я пробовал разные входы, но каждый раз есть только один вывод: ?????? –

ответ

1

использования for(int j=0; j<str.length(); j++) // string index length are 0 based

вместо

for(int j=0; j<=str.length(); j++)

1

Строки в java основаны на нуле. Таким образом, вы должны удалить = в первом цикле:

for(int j=0; j<str.length(); j++){ 
1

символьная строка всегда начинаются с индекса 0, это означает, что если вы храните

String str="text"; 

затем

str.charAt(0) // return "t" 
str.charAt(1) // return "e" 
str.charAt(2) // return "x" 
str.charAt(3) // return "t" 

и если вы звоните str.charAt(4)

он будет бросать java.lang.StringIndexOutOfBoundsException это значит, индекс, который вы ориентируетесь, чтобы получить данные из вне границы.

Так что просто измените свою петлю, как и все предлагали. Подобно этому,

 for(int j=0; j<str.length(); j++){ 
      for(int i=0; i<256; i++) { 
       if((char)i == str.charAt(j)){ 
        str.setCharAt(j, (char)(i+3)); 
       } 
      } 
     } 
0

Использование j<= str.length() to j< str.length() в for(int j=0; j<str.length(); j++), как индекс начинается с 0

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