2013-05-16 7 views
0

Может кто-то может помочь мне со следующей ошибкой. Исключение в потоке главного java.lang.arrayindexoutofboundsexception: 3 в RowTrans.encrypt (Rowtrans.java:33) в RowTrans.main (Rowtrans.java: 7)Исключение из потока main ArrayIndexOutOfBoundsException

В моей программе я хочу, чтобы получить текст. Поместите его в матрицу с 5 столбцами и определите строки в соответствии с длиной текста. Затем я хочу изменить позицию столбца и строки так, чтобы строка получала позицию столбцов и столбец строки. И когда строка не содержит 5 значений, я хочу добавить символ Z в пустые пространства. Может ли кто-нибудь помочь мне в этой ошибке, пожалуйста.

Вот мой код

import java.util.Scanner; 

public class ColTrans { 

    public static void main(String[] args) 
    { 
     String ori = "This is my horse"; 
     String enc = encrypt(ori); 
     System.out.println(enc); 
     // String dec = decrypt(enc); 
     // System.out.println(dec); 
    } 

    static String encrypt(String text) 
    { 
     String result = ""; 
     text = text.toUpperCase(); 
     int length = text.length(); 
     int rows = length/5; 
     char[][] b = new char[rows][5]; 
     char[][] c = new char[5][rows]; 
     char[] d = new char[length]; 
     if ((length % 5) != 0) 
     rows = rows + 1; 

     int k = 0; 
     for (int i = 0; i < rows; i++) 
     for (int j = 0; j < 5; j++) 
     { 
      if (k > length) 
       b[i][j] = 'Z'; 
      else 
      { 
       d[k] = text.charAt(k); 
       b[i][j] = d[k]; 
      } 

      k++; 
     } 

     for (int i = 0; i < 5; i++) 
     for (int j = 0; j < rows; j++) 
     { 
      c[i][j] = b[j][i]; 
      result = result + c[i][j]; 
     } 

     return result; 

    } 
} 
+0

Если текст длиннее 5 символов, как вы собираетесь поместить его в массив из 5 столбцов? Вы проигнорируете остальное? – Sam

+0

Я хочу, чтобы первые 5 символов были в первой строке, а вторая пятая (6-10) была во второй строке и так далее. Я неправильно сформулировал это неправильно, может быть, вы мне поможете? –

+0

Можете ли вы привести пример ввода/вывода? – Sam

ответ

0

Есть 2 проблемы в вашем коде. Сначала переместите моды части перед матрицей конкретизации:

if ((length % 5) != 0) 
    rows = rows + 1; 

    char [][] b =new char[rows][5]; 
    [...] 

Затем измените if (k > length) на if (k >= length)

1

Вот причина:

Вы increamenting переменных строк по одному, как только вы определили массив.

Переместить следующую строку перед линией char [][] b =new char[rows][5];

if ((length % 5) != 0) 

     rows = rows + 1; 
0

просто изменить код следующим образом:

if ((length % 5) != 0) 
    rows = rows + 1; 
char[][] b = new char[rows][5]; 
char[][] c = new char[5][rows]; 
char[] d = new char[length]; 
0

По вашему описанию:

text = text.toUpperCase(); 
    char[] b = text.toCharArray(); 
    char[][] c = new char[b.length][5]; 

    int bLen = 0; 
    for (int i = 0; i < c.length; i++) { 
     for (int j = 0; j < 5; j++) { 
      if(bLen < b.length) 
       c[i][j] = b[bLen++]; 
      else 
       c[i][j] = 'Z'; 

     } 
    } 

//change the column and row position 
char[][]d = new char[c[0].length][c.length]; 

    for (int i = 0; i < d.length; i++) { 
     for (int j = 0; j < d[0].length; j++) { 
      d[i][j] = c[j][i]; 

     } 
    } 

Выход: TI EZZZZZZZZZZZZHSHZZZZZZZZZZZZZI OZZZZZZZZZZZZZSMRZZZZZZZZZZZZZ YSZZZZZZZZZZZZZ

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