Java 线程主数组中的异常IndexOutofBoundsException

Java 线程主数组中的异常IndexOutofBoundsException,java,indexoutofboundsexception,Java,Indexoutofboundsexception,有人能帮我解决以下错误吗。主线程java.lang.arrayindexoutofboundsexception中的异常:3位于RowTrans.encrypt(RowTrans.java:33) 位于RowTrans.main(RowTrans.java:7) 在我的程序中,我想得到一个文本。将其放入一个有5列的矩阵中,并根据文本的长度确定行。然后我想改变列和行的位置,这样行就可以得到列的位置,列就可以得到行。当一行不包含5个值时,我想在空白处添加字符Z。有人能帮我解决这个错误吗 这是我的密码

有人能帮我解决以下错误吗。主线程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;

   }
}
import java.util.Scanner;
公共类ColTrans{
公共静态void main(字符串[]args)
{
String ori=“这是我的马”;
字符串enc=加密(ori);
系统输出打印项次(enc);
//字符串dec=解密(enc);
//系统输出打印项次(12月);
}
静态字符串加密(字符串文本)
{
字符串结果=”;
text=text.toUpperCase();
int length=text.length();
int行=长度/5;
char[][]b=新的char[行][5];
char[][]c=新的char[5][rows];
char[]d=新字符[长度];
如果((长度%5)!=0)
行=行+1;
int k=0;
对于(int i=0;i长度)
b[i][j]='Z';
其他的
{
d[k]=text.charAt(k);
b[i][j]=d[k];
}
k++;
}
对于(int i=0;i<5;i++)
对于(int j=0;j
您的代码中有两个问题。首先在矩阵实例化之前移动mod部件:

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

   char [][] b =new char[rows][5];
   [...]
然后将
if(k>length)
更改为
if(k>=length)

原因如下:

定义数组后,将行变量递增1

将下一行移到行
char[]b=新字符[行][5]之前

if ((length % 5) != 0)

      rows = rows + 1;

只需按以下方式更改代码:

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

根据你的描述:

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];

        }
    }
text=text.toUpperCase();
char[]b=text.toCharArray();
字符[][]c=新字符[b.length][5];
int-bLen=0;
for(int i=0;i
输出:
TI-ezzzzzzzzzzzhshzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyszzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

如果文本长度超过5个字符,如何将其放入5列数组中?你要忽略其余的吗?我希望前5个字符在第一行,后5个字符(6-10)在第二行,依此类推。我把它编错了吗?你能帮我吗?你能举个输入/输出的例子吗?