2014-12-10 3 views
0

Я написал статический метод, который предназначен для взятия строки и скремблирования.Java: Почему я продолжаю получать исключение StringIndexOutOfBoundsException для этого метода?

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

«F rneosedvuc eroasn», потому что строка шифруется в сетке ниже.

row 1:  f r n e 

row 2:  o s e d v 

row 3:  u c  e 

row 4:  r o a s n 

Когда я запускаю этот метод, я продолжаю получать StringIndexOutOfBoundsException на линии, которые используют s.charAt(i). Я не знаю, почему это так. Независимо от того, насколько я изменяю тест на цикл, который явно кажется проблемой, я все равно получаю эту ошибку.

Код:

public class Test { 
public static void main(String[] args){ 
    System.out.println(encode("four score and seven", 4)); 
} 
public static String encode(String s, int n){ 
    String finalOutput = ""; 
    for (int i = 0; i < n; i++){ 
     String output = ""; 
     for(int j = 0; j < s.length() - 1; i += n){ 
      System.out.println(s.charAt(i) + " " + i); 
      output += s.charAt(i); 
     } 
     finalOutput += output; 
    } 
     return finalOutput; 
    } 
} 
+1

для (Int J = 0, J

+0

Я пытаюсь добавить символ, который находится в индексе i, тогда i + n, то i + n. Буквы n находятся друг от друга в индексе. – user3450277

+1

Если длина равна 5, тогда я достиг бы 12, что явно выходит за пределы. Кроме того, поскольку вы никогда не увеличиваете j, ваш цикл работает вечно. – csmckelvey

ответ

2

состояние должно быть таким:

for(int j = 0; j < (s.length()-1) && i<s.length(); j++, i+=n) 

U нету incremantation J ++, но ваш цикл будет до бесконечности.

+1

, даже когда я преобразовал s.length в s.lenght() и добавлю в свой код. мой код дает мне ** Исключение в потоке «main» java.lang.RuntimeException: Некомпилируемый исходный код - Ошибочный тип дерева: \t на Test.encode (Test.java:19) \t на Test.main (Test.java : 13) Java Результат: 1 ** –

+0

О, простите, ^^ Я забыл об этом. – machei

+0

, но код все еще не компилируется. –

0

просто изменить

for(int j = 0; j < s.length() - 1; i += n) to <br /> 
for(int j = 0; j < s.length() - 1 &amp;&amp; i&lt;s.length(); i += n) 
0

Во втором цикле и должны парафировать с J = я, это сделает ваш код простой

String finalOutput = ""; 
     for (int i = 0; i < n; i++) { 
      String output = ""; 
      for (int j = i; j < s.length() ; j += n) { 
       System.out.println(s.charAt(j) + " " + j); 
       output += s.charAt(j); 
      } 
      finalOutput += output;   
     } 
     return finalOutput; 
Смежные вопросы