2014-10-06 1 views
-2

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

EDIT: РЕШЕННЫЕ плохие скобки означает INT MAX не assinged правильное значение

Соответствующий код

public void ColumnCode(String plaintext) { 
    System.out.println("Please enter the number of columns you want"); 
    int columns = slave.getNum(); 

    int MAX = (plaintext.length()-1/columns)+1; //number of times to iterate the for loop 
    String[] groups = new String[MAX]; 

    for(int i = 0; i < MAX; i++) { 
     if((4*i)+4 > plaintext.length()) groups[i] = plaintext.substring(4*i); 
     else groups[i] = plaintext.substring(4*i, 4*(i+1)); 
     System.out.println(groups[i]); 
    } 
} 

Пример сообщения об ошибке:

Now please enter the plaintext to be encrypted: 
THIS IS A MESSAGE 
Please enter the number of columns you want 
4 
THIS 
IS 
A ME 
SSAG 
E 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -3 
    at java.lang.String.substring(Unknown Source) 
    at Cryptopher.ColumnCodeClass.ColumnCode(ColumnCodeClass.java:26) 
    at Cryptopher.mainFile.encrypt(mainFile.java:86) 
    at Cryptopher.mainFile.runTheProgram(mainFile.java:55) 
    at Cryptopher.mainFile.main(mainFile.java:36) 
+0

Вы получаете индекс ошибки границ, потому что на последней итерации вы должны иметь 4 элемента в вашем массиве, но ваш массив заполняется только одним элементом («E»). – orgtigger

ответ

1

Ошибка вызвана этой линией:
int MAX = (plaintext.length()-1/columns)+1;

Порядка операций будет делать вычитание в скобках после 1/столбцов вычисляются.

Это приводит к тому, что внутренняя разница становится (в случае 4 столбцов) plaintext.length() - 0,25, что делает ваш MAX больше размера массива, вызывая ошибку.

+1

А, это имеет смысл. В стороне, не будет ли это «plaintext.length() - 0», поскольку он назначен для int? – spyr03

+0

Это точно. – Travis

1

У вас есть кронштейн в не то место.

Это должно быть int MAX = (plaintext.length()-1)/columns+1

+0

+1 ты бил меня. – bcorso

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