2015-01-20 30 views
0

我正在尝试从我正在阅读的书中重现代码,但无法使其工作,下面是代码:带Java的3D数组(测试示例来自“Java:完全参考”,第9版)

public class ThreeDArray { 

public static void main(String[] args) { 
    int threeD [][][] = new int [3][4][5]; 
    int i, j, k; 
    for (i = 0; i < 3; i++) { 
     for (j = 0; j < 4; j++) { 
      for (k = 0; k < 5; k++) { 
       threeD [i][j][k] = i*j*k; 
      } 
     } 
     for (i = 0; i < 3; i++) { 
      for (j = 0; j < 4; j++) { 
       for (k = 0; k < 5; k++) { 
        System.out.print(threeD[i][j][k]+" "); 
       } 
       System.out.println(""); 
      } 
      System.out.println(""); 
     } 
    } 
} 
} 

我得到这样的输出:。

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

在这里,我让所有的零和我不能在这里发现错误,请告知这里有什么问题

+0

好吧,你告诉我们什么不应该发生,但没有告诉我们应该发生什么。 – MattD 2015-01-20 20:47:17

回答

1

错误支架放置:你的第二个for循环应该是第一个外:

int i, j, k; 
for (i = 0; i < 3; i++) { 
    for (j = 0; j < 4; j++) { 
     for (k = 0; k < 5; k++) { 
      System.out.printf("%d %d %d %d %n", i, j, k, i * j * k); 
      threeD [i][j][k] = i*j*k; 
     } 
    } 
} // move to here ... 
for (i = 0; i < 3; i++) { 
    for (j = 0; j < 4; j++) { 
     for (k = 0; k < 5; k++) { 
      System.out.print(threeD[i][j][k]+" "); 
     } 
     System.out.println(""); 
    } 
    System.out.println(""); 
} 
// ... from here 

你们了,你是递增i与打印循环,这意味着你的第一个循环的i退出第二次迭代的方式。现在它打印:

0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

0 0 0 0 0 
0 1 2 3 4 
0 2 4 6 8 
0 3 6 9 12 

0 0 0 0 0 
0 2 4 6 8 
0 4 8 12 16 
0 6 12 18 24
+0

谢谢安迪!我不能相信我错过了这一点。 – fthnm2014 2015-01-20 20:51:27

+0

@ fthnm2014。对于它的价值,我会避免在'for'之外的循环声明'int'。再次将括号放在错误的地方,但删除'int i,j,k'声明并将for'循环声明为for(int ...)'。您的编译器可能会沿着''Duplicate local variable i''的行发出一个错误,您会发现它。 – 2015-01-20 21:11:16