#java #multidimensional-array
#java #многомерный массив
Вопрос:
Строка Try отображается красным и :
Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: индекс 2 выходит за пределы длины 2 при подсчете пропусков.Skipcounting.main(MyJava.java:11)
package skipcounting;
public class Skipcounting {
public static void main(String[] args) {
try {
int[][] numbers = {{1, 2, 3, 4, 5}, {10, 20, 30, 40, 50}};
for (int i = 0; i < numbers[1].length; i ) {
for (int j = 0; j < numbers[1].length; j ) {
System.out.println("numbers[" i "][" j "]=" numbers[i][j]);
}
}
}
}
}
Комментарии:
1.
z< numbers[1].length
во внешнем цикле должно бытьz< numbers.length
.z< numbers.length
указывает количество строк иz< numbers[1].length
количество столбцов. У вас есть 2 строки 5 col. Но в коде вы перебираете 5 строк и 5 столбцов. И поскольку у вас есть только 2 строки. Вы получаете arrayoutofboundexception2. Вместе с выводом: выводом должны быть числа [0] [0] = 1 числа [0] [1] = 2 числа [0] [2] = 3 числа [0] [3] = 4 числа [0] [4] = 5 чисел [1] [0] = 10 чисел [1] [1] = 20 чисел [1] [2] = 30 чисел [1] [3] = 40 чисел [1] [4] = 50
3. а также строка try{ отображается красным
4. Я не уверен, что вы пытаетесь спросить. Смогли ли вы понять мой комментарий?
5. При попытке должен быть подвох .
Try
устанавливает ловушку ошибок иcatch
улавливает ошибку, чтобы вы могли ее использовать (обработать). : D
Ответ №1:
Проблема здесь в том, как вы получаете количество строк и столбцов в вашем 2D-массиве.
int[][]numbers ={{1,2,3,4,5},{10,20,30,40,50}}
— это означает, что есть 2 строки, и для каждой строки есть 5 столбцов.int[][]numbers ={{1,2,3,4,5},{10,20,30,40,50,60,70}}
— Если вы посмотрите на это, есть 2 строки, но для 1-й строки есть 5 столбцов, а для 2-й строки — 7 столбцов
если вы хотите получить количество строк, используйте это — numbers.length
если вы хотите получить количество столбцов в строке, используйте это — numbers[row_index].length
Итак, в вашем вопросе правильный кодовый мир будет-
for (int i=0; i< numbers.length; i ){
for (int j=0; j<numbers[i].length; j ){
System.out.println("numbers[" i "][" j "]=" numbers[i][j]);
}
}
Ответ №2:
Это должно сработать. Дайте мне знать.
public class Skipcounting {
public static void main(String[] args) {
int[][]numbers ={{1,2,3,4,5},{5,10,15,20,25}};
for (int z = 0; z < 2; z ){ // Fixed from "z<numbers[1].length to "z<2".
for (int o = 0; o < 5; o ){ //Fixed from "z " to "o ".
System.out.println("numbers[" z "][" o "]=" numbers[z][o]);
}
}
}
}
Комментарии:
1. Вы должны указать, почему операционный код не работал. Этот код может исправить ошибку, но на самом деле не решить проблему.
2. @Chemistry Major Ваш код не работал по двум основным причинам: 1) Во втором цикле for у вас было «z » вместо «o «, таким образом, вы увеличивали z дважды, что приводило к проблемам с привязкой индекса массива. 2) Ваш первый цикл for был привязан к «z Таким образом, вы пытались получить доступ к массиву с индексом больше 1 (например, numbers [3]), что стало второй причиной проблемы с привязкой индекса массива. Надеюсь, это поможет.
3. Также добавьте комментарий в свой ответ.
4. Удалите блок try-catch. В этом нет необходимости. Кстати, вы не должны перехватывать исключение базового класса.