0

有人可以帮助我解决以下错误。线程主 java.lang.arrayindexoutofboundsexception 中的异常:3 在 RowTrans.encrypt(Rowtrans.java:33) 在 RowTrans.main(Rowtrans.java:7)

在我的程序中,我想得到一个文本。将其放入一个 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;

   }
}
4

4 回答 4

1

这是原因:

定义数组后,您将行变量加一。

将下一行移到行前 char [][] b =new char[rows][5];

if ((length % 5) != 0)

      rows = rows + 1;
于 2013-05-16T09:09:51.913 回答
0

您的代码中有 2 个问题。首先在矩阵实例化之前移动 mod 部分:

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

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

然后if ( k > length )改为if ( k >= length )

于 2013-05-16T09:07:04.240 回答
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];
于 2013-05-16T09:20:55.000 回答
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

于 2013-05-16T09:21:09.170 回答