所以我试图解决名人问题。你有一个2d数组填充0和1.行(=人)只包含1,是名人。 如果没有,则int n为0,并且将是行仅包含1的2d数组的列号。
问题是,我无法找到ArrayIndexOutOfBoundsException
。它必须在循环中的任何地方。我使用了5x5 2d数组并以i = 0
开头。
该循环仅在i : 3
之前有效,然后抛出异常。
public int startSearch(int[][] matrix , int i) {
int j = 0;
int n = 0;
int esc = 0;
while(esc == 0) {
if(matrix[i][j] == 1) {
j++;
if( j >= (matrix.length +1) ) {
n = i+1;
esc = 1;
}
}
if(matrix[i][j] == 0) {
esc = 1;
}
}
i++;
if( i <= matrix.length) {
System.out.println("i : " +i);
System.out.println(n);
startSearch(matrix, i);
}
return n;
}
答案 0 :(得分:0)
您必须注意,在 Java 中,数组的索引从0到length-1 ,所以0, 1, 2, 3, 4
用于大小为5的数组。
在循环中,您正在检查:
if( j >= (matrix.length +1) ) {
n = i+1;
esc = 1;
}
// and
if( i <= matrix.length){
System.out.println("i : " +i);
System.out.println(n);
startSearch(matrix, i);
}
你应该检查:
if( j >= matrix.length ) {
n = i+1;
esc = 1;
}
// and
if( i < matrix.length){
System.out.println("i : " +i);
System.out.println(n);
startSearch(matrix, i);
}
否则,例如,对于i = 3
,您可能j = 5
为5 < 5+1
答案 1 :(得分:0)
在此行if(matrix[i][j] == 1)
if(i<matrix.length && j<matrix[i].length)
{
if(matrix[i][j] == 1)
{
//rest all same
同时在此行if(matrix[i][j] == 0){
if(i<matrix.length && j<matrix[i].length)
{
if(matrix[i][j] == 0){
//rest all same
答案 2 :(得分:0)
可能是这一行:if(j >= (matrix.length + 1)){
当j == matrix.length + 1时j将进入此if循环,在此之前,访问matrix[i][matrix.length]
将导致ArrayIndexOutOfBoundsException,因为长度为n的数组的索引在[0,n]之间 - 1],当你试图获得索引n的值时肯定会出错。