2014-02-19 75 views
0

我有这些while循环和语句。它正在做我想要的,打印数组的特定部分。但是,我一直得到一个越界的声明。我无法弄清楚。我觉得如果我的陈述应该防止指数变大,那么它已经是。为什么这给我这个数组outoutofs错误?

注:我已经有一个方法创建这个数组并初始化它的值,所以假设数组是两个维度。

任何建议如何让它避免出界?

其目的是,我希望列和行都增加1,直到他们不能再增加。

int columnincrement = 0; 
    String spacing = "\t"; 
    int diagcol=0; 
    int diagrow=0; 
    while(diagcol<themainarray[columnincrement].length) 
    { 

      System.out.println(spacing+themainarray[diagcol][diagrow]); 
      spacing+= "\t"; 
      System.out.print("\n"); 

      if (diagcol<=themainarray[columnincrement].length) 
      { 

      columnincrement++; 
      diagcol++; 
      diagrow++; 

      } 


    } 
+2

考虑实际调试问题。 –

+1

(什么是整个异常消息?可能性是异常消息告诉你到底发生了什么错误。) –

+0

'线程中的异常“main”java.lang.ArrayIndexOutOfBoundsException:3 \t at TwoDimensionalArray.mainDiagonal(TwoDimensionalArray.java: 162) \t at TwoDimensionalArray.main(TwoDimensionalArray.java:38))' – munchschair

回答

2

数组是从0开始的。

arr[arr.length]也将抛出一个异常

改变你的if语句下面,*注意<和thhe -1;

if (diagcol<themainarray[columnincrement].length - 1) 

如果你作出这样的改变,至少还有你的代码将没有indexoutofbounds异常运行的机会。这不是100%的机会。


如果themainarray.length小于themainarray[columnincriment].length比你还可以得到一个例外,因为无处你对themainarray.length

+0

还有一些关于你的代码的其他东西不是最佳实践,但我不想混淆帖子太多 –

+0

是因为while循环吗?我原本是为了循环,但我有例外。我想我会尝试别的。 – munchschair

+0

@munchschair它更关心的事实是,您正在使用'digacol'来检查其他值索引的数组的长度 –

0

检查我认为你是检查错了东西。它看起来像在你想要的d2array的第一部分中的项目数量和你想要的数量在2darray的第二部分的项目数量。这可能有效:

int columnincrement = 0; 

String spacing = "\t"; 
int diagcol=0; 
int diagrow=0; 
while(diagcol<themainarray.length) { 
     System.out.println(spacing+themainarray[diagcol][diagrow]); 
     spacing+= "\t"; 
     System.out.print("\n"); 

     if (diagrow<=themainarray[columnincrement].length) { 
      columnincrement++; 
      diagcol++; 
      diagrow++; 
     } 

}