我是java的新手。我希望打印两个dimemensional数组中的内容,即myPoints。但是,当我打印代码时,它会抛出以下错误。
mypoints4
i value is 0
2
i value is 1
5
i value is 2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
2 at perceptron.main(perceptron.java:37)
import java.util.*;
import java.io.*;
import java.text.*;
import java.math.*;
import java.awt.*;
class perceptron{
public static void main(String[] args){
int[][] myPoints = {{2,3},{4,5},{7,8},{9,10}};
int [][] myplot = {{3,4},{5,6},{5,5},{5,3}};
int sum=0;
int i=0;
System.out.println("mypoints"+myPoints.length);
while(i<=myPoints.length){
System.out.println("i value is"+i);
System.out.println(myPoints[i][i]);
i = i+1;
}
}
}
答案 0 :(得分:1)
这是因为while(i<=myPoints.length)
需要while(i<myPoints.length)
..如果数组大小为5,你的i应该是i = 0,i = 1,i = 2,i = 3, i = 4 ..排除5。
另一个问题是:
System.out.println(myPoints[i][i]);
应该是:System.out.println(myPoints[i][0] + " " + myPoints[i][1]);
因为你的数组的第二维只有2个大小而不是5
答案 1 :(得分:1)
您需要使用嵌套循环。
你得到ArrayIndexOutOfBoundsException的原因是因为你正在使用myPoints[i][i]
,所以当i
为2时,它正在寻找第三个内部数组的第三个元素(即{7,8}
)它不存在
答案 2 :(得分:0)
你在while循环中的条件必须是&#34; less&#34;不是&#34;少于或等于&#34;。 这是因为数组索引是基于零的,因此索引范围始终从0到(length - 1)。
答案 3 :(得分:0)
你要去(以及包括)外部数组的长度。这是一个超出范围的数组索引,因为长度为n
的数组的索引为0 ... (n-1)
。因此,尝试访问索引n
已超出范围。
您正在访问索引i
的子数组,该子数组超出以后的子数组的范围。这适用于方形矩阵(你读下对角线),但你的矩阵是4 * 2,所以myPoints[2][2]
是OOB,因为你不能访问长度为2
的长度{ {1}}数组2
。
迭代2-D数组中每个元素的最简单方法是必须有一个嵌套循环,如下所示:
{7,8}
更简洁的方法是使用 for-each 循环,完全删除索引,然后按顺序给出数组中的每个元素:
for(int i = 0; i < myPoints.length; i++){
for(int j = 0; j < myPoints[i].length; j++){
System.out.println(myPoints[i][j]);
}
}
甚至更简洁的方法是使用方法Arrays.deepToString(...):
for(int[] row : myPoints){
for(int val : row){
System.out.println(val);
}
}