Java:数组索引超出范围。循环问题

Java:数组索引超出范围。循环问题,java,arrays,Java,Arrays,我对java相当陌生,但我正在制作一个加密程序,将每个字符放在一个网格中。在本例中,我将使用“abcde”作为字符串。当通过该程序时,应该将每个字符放置在一个3x2(高度x宽度)的网格中。程序从上到下读取网格,然后移动到下一行,它将被读取为“acebd”。程序的这一部分将每个字符加载到char[height][width]中 line length: 5, height: 3, width: 2, longColumn: 1 //longColumn -- the number of valid

我对java相当陌生,但我正在制作一个加密程序,将每个字符放在一个网格中。在本例中,我将使用“abcde”作为字符串。当通过该程序时,应该将每个字符放置在一个3x2(高度x宽度)的网格中。程序从上到下读取网格,然后移动到下一行,它将被读取为“acebd”。程序的这一部分将每个字符加载到char[height][width]中

line length: 5, height: 3, width: 2, longColumn: 1
//longColumn -- the number of valid columns in the last row


static char[][] loadGrid(String line, int width, int height, int longColumn) {
  char grid[][] = new char[height][width];


  int charCount = 0;
  for (int i = 0; i <= line.length()-1; i++){
     if (i < line.length()-1) {
        for (int c = 0; c < width; c++) {   
           for (int r = 0; r < height; r++) {
              if (r < height - 1 || c < longColumn) {
                 grid[r][c] = line.charAt(charCount);
                 charCount += 1;
              }
           }
        }
     } 
  }
return grid;  
}

据我所知,charCount不是4,只是停留在3。我已经厌倦了摆弄它,但它不是停留在3,就是变为5。另外,我认为它只经过前两个for循环一次,然后在第三个循环之后就不会再返回了。第三个循环是唯一正确循环的循环。感谢您的帮助。谢谢。

我建议使用调试器,并逐步完成程序。确保跟踪数组大小和变量(尤其是r和c)。错误是由(r,c)在数组外部引起的。还有其他一些事情

1.
charcount+=1
可以替换为
charcount++

2.请记住,在处理整数时,
if(r
if(r基本相同,我看不出
longColumn
有什么意义,我想您需要类似的东西

static char[][] loadGrid(String line, int width, int height) {
    char grid[][] = new char[height][width];
    int charCount = 0;
    for (int r = 0; r < height; r++) {
        for (int c = 0; c < width; c++) {
            if (charCount < line.length()) {
                grid[r][c] = line.charAt(charCount);
                charCount++;
            }
        }
    }
    return grid;
}
static char[][]加载网格(字符串行、整数宽度、整数高度){
字符网格[][]=新字符[高度][宽度];
int charCount=0;
对于(int r=0;r
什么是高度,什么是宽度?为什么不使用
网格。长度
?高度是r,它是3。宽度是c,它是2。网格不是任何东西,只是一个空数组。基本上,line.length是我希望它循环的次数,这取决于字符串中有多少个字符。@ellottfrisch
static char[][] loadGrid(String line, int width, int height) {
    char grid[][] = new char[height][width];
    int charCount = 0;
    for (int r = 0; r < height; r++) {
        for (int c = 0; c < width; c++) {
            if (charCount < line.length()) {
                grid[r][c] = line.charAt(charCount);
                charCount++;
            }
        }
    }
    return grid;
}