2010-07-08 114 views
2

首先,初学者在这里。我正在使用此代码。二维阵列帮助

class MDArrays { 
    public static void main(String[] args) { 
     int[][] x; 
     int t=2; 
     x = new int[2][3]; 

     for(int i=0; i<=1; i++) { 
      for(int j=0; i<=2; j++) { 
       x[i][j] = t; 
       t += 2; 
       System.out.println(x[i][j]); 
      } 
     } 
    } 
} 

它编译完美,但运行时,正确显示3个数字后,我收到以下错误。

Exception in thread "main" java.Lang.ArrayindexOutOfBoundsException : 3 at MDArrays.main(MDArrays.java:13)

我要去哪里错了?

+0

+1 - 虽然这是一个简单的错误,但是这个问题有很好的语法,并且写得很清楚。 – Andres 2010-07-09 20:54:56

回答

8

你正在增加j,同时检查我。

for(int j=0; i<=2; j++) 

Ĵ将继续增值,这将最终给你一个IndexOutOfBoundsException异常

+0

不能相信我打错了它这是一个不好的问题 – MoonStruckHorrors 2010-07-08 16:27:08

3
for(int j=0; i<=2; j++) { 

是你的问题。尝试:

for(int j=0; j<=2; j++) { 
3

我会写这样的:

class MDArrays 
{ 
    private static final int ROWS; 
    private static final int COLS; 
    private static final int START_VALUE; 
    private static final int INC_VALUE; 

    static 
    { 
     ROWS  = 2; 
     COLS  = 3; 
     START_VALUE = 2; 
     INC_VALUE = 2; 
    } 

    public static void main(String[] args) 
    { 
     final int[][] x; 
     int   t; 

     x = new int[ROWS][COLS]; 
     t = START_VALUE; 

     for(int row = 0; row < x.length; row++) 
     { 
      for(int col = 0; col < x[row].length; col++) 
      { 
       x[row][col] = t; 
       t += INC_VALUE; 
       System.out.println(x[row][col]); 
      } 
     } 
    } 
} 

的主要区别是,我使用。长度成员,而不是硬编码值。这样,如果我将其更改为x = new int[3][2];,那么代码会神奇地工作并保持在其范围内。

另一个很大的区别是我使用行/列而不是i/j。我/ j很好(和传统),但我发现在处理数组数组(Java实际上并没有多维数组)时,如果我使用更有意义的行/ col(帮助防止你从事for(int col = 0; row < x.length; col++) ......这是你的错误,

+0

我也想用私人静态决赛摆脱那些神奇的数字(2和3) – Joni 2010-07-08 16:41:41

+0

是的,我也打算这样做,但并不想让它变得与众不同 - 但给你也有这种感觉我会这样做的! – TofuBeer 2010-07-08 16:43:50

+0

你是不是指x.length? Currentl y在行上: for(int row = 0; row 2010-07-08 16:53:34