在我的循环中找不到ArrayIndexOutOfBoundsException:5
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在我的循环中找不到ArrayIndexOutOfBoundsException:5相关的知识,希望对你有一定的参考价值。
所以我试图解决名人问题。你有一个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;
}
你必须注意,在Java中,数组的索引从0到长度为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
在此行之前检查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
可能是这一行:if(j >= (matrix.length + 1)){
当j == matrix.length + 1时,j将进入此if循环,在此之前,访问matrix[i][matrix.length]
将导致ArrayIndexOutOfBoundsException,因为长度为n的数组的索引在[0,n - 1]之间,并且它是当你试图获得索引n的值时,肯定会出现错误。
以上是关于在我的循环中找不到ArrayIndexOutOfBoundsException:5的主要内容,如果未能解决你的问题,请参考以下文章
在我的 FragmentContainerView 对象中找不到方法 getFragment()