我想打印出这个多维数组的元素,但是我得到索引超出范围错误。
public class test {
public static void main(String[] args) {
int array1[][]={{1,2,3,4},{5},{6,7}};
for (int i=0; i<3;i++){
for (int j=0; j<4;j++){
System.out.println(array1[i][j]);
}
}
}
}
答案 0 :(得分:5)
问题在于,使用这样编写的循环,您假设嵌套数组的长度都是4
(并且它们不是)。你最好这样做:
for (int i=0; i < array1.length;i++) {
for (int j=0; j < array1[i].length;j++) {
...
}
}
答案 1 :(得分:2)
是的,因为第二个“子阵列”没有4个元素。动态执行此操作会更好:
// Note preferred syntax for array types - keep all the type info in one place.
int[][] array1 = {{1,2,3,4},{5},{6,7}};
for (int i = 0; i < array1.length; i++) {
for (int j = 0; array1[i].length; j++) {
System.out.println(array1[i][j]);
}
}
这样,内循环的迭代计数取决于迭代的数组。
另一种方法是使用增强型for循环:
for (int[] subarray : array1) {
for (int value : subarray) {
System.out.println(value);
}
}
答案 2 :(得分:0)
关于以下解决方案有2分(以及其他类似的答案):
for (int i=0; i < array1.length;i++) {
for (int j=0; j < array1[i].length;j++) {
...
}
}
在这里,因为代码很短,所以不会有太大的区别,但是为了获得更好的性能,如果结果永不更改,则应始终避免重复计算。 array1的长度不会改变,因此每次迭代计算其长度都没有效率。这将是改进的解决方案。
int array1Length = array1.length;
for (int i=0; i < array1Length;i++){
int array1InnerLength = array1[i].length;
for (int j=0; j < array1InnerLength;j++){
...
}
}
有些人可能建议使用++j
/ ++i
而不是i++
和j++
以获得更好的性能,您可以在此处阅读有关的更多信息:{{3 }}。它不是至关重要的imo,但它可以增进您对所编写代码的理解。