2015-01-20 4 views
0

Я пытался воспроизвести код из книги, которую я читаю, и не могу заставить ее работать. Вот код:3D-массив с Java (пример тестирования с 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

ответ

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

+0

@ fthnm2014. Для чего это стоит, я бы не стал объявлять 'int' для цикла вне' for'. Верните свою скобку в неподходящее место, но удалите декларации 'int i, j, k' и объявите свои' for' петли как 'for (int ...)'. Возможно, ваш компилятор допустил ошибку в строке «Дублировать локальную переменную i», которую вы бы заметили. –