我对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;
}
当我运行它时,我收到此错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at GridEncrypt.loadGrid(GridEncrypt.java:93)
at GridEncrypt.processInput(GridEncrypt.java:65)
at GridEncrypt.main(GridEncrypt.java:19)
根据我的理解,charCount不会4,只是停留在3.我已经厌倦了它,但它只是停留在3或者转到5.此外,我认为它通过前两个for循环一次然后只是在它运行通过第三个循环后才回到它。然后第三个循环是唯一一个正确循环的循环。任何帮助表示赞赏。感谢。
答案 0 :(得分:0)
我建议使用调试器,然后单步执行程序。确保跟踪数组大小和变量(尤其是r和c)。错误是由(r,c)在数组外部引起的。还有一些其他的事情。
1. charcount += 1;
可以替换为charcount++;
2.请记住,在处理整数时,if (r < height - 1)
与if(r <= height - 2)
基本相同
3.变量i和charcount正在说同样的事情,所以你可以组合这些变量。
答案 1 :(得分:0)
我没有看到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;
}