Я довольно новичок в java, но я делаю программу шифрования, которая помещает каждый символ в сетку. В этом случае я просто использую «abcde» в качестве моей строки. При переносе через программу предполагается разместить каждый символ в сетке 3x2 (высота x ширина). Программа считывает сетку сверху вниз, а затем переходит к следующей строке, и она будет считана как «acebd». Эта часть программы загружает каждый символ в char [height] [width].Java: индекс массива за пределами границ. Проблемы с петлей
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. Кроме того, я думаю, что он проходит через первые два цикла, а затем просто не возвращается к нему после прохождения третьего цикла. Который тогда 3-й цикл является единственным, который правильно зацикливается. Любая помощь приветствуется. Благодарю.
Что такое высота и какова ширина? Почему вы не используете 'grid.length'? –
Высота r, которая равна 3. Ширина - c, а это 2. Grid еще ничего, просто пустой массив. В принципе, line.length - это количество раз, когда я хочу, чтобы оно было зациклировано, в зависимости от количества символов в строке. @ElliottFrisch – yuya