2016-02-18 7 views
-1

Я написал код на Java, чтобы сопоставить пары в классах (для назначений или сидя или что-то еще), поэтому я использовал 2D-массив. The BlueJ говорит мне, что в последнем цикле моего кода есть ArrayOutOfBoundsException, и я не смог его решить. Может ли кто-нибудь сказать мне, как это исправить?Что случилось с моим 2D-массивом?

byte pref; 
    System.out.println("How many children are in your class"); 
    byte children = reader.nextByte(); 
    byte[][] students = new byte[children][children]; //Each cell contains the rank of the match 
    System.out.println("Enter each child's preference, according to their number:"); 
    for (byte b=0;b<students.length;b++)//Ranks each match 
    { 
     System.out.print((b+1)+") "); 
     pref = reader.nextByte(); 
     pref--; 
     students[b][pref]++; 
    } 
    System.out.println("The matches got 2 points are:"); 
    for (byte b=0;b<students.length;b++) 
    { 
     for (byte c=0;c<students.length;b++) 
     { 
      if (students[b][c]==2) 
        System.out.print(b+"+"+c); 
     } 
    } 

Благодаря

+0

Вы увеличиваете 'b' во втором цикле ... вы хотели это сделать? –

ответ

0

опечатка ошибка в вложенном цикле Изменение

for (byte c=0;c<students.length;b++) 

Для

for (byte c=0;c<students.length;c++) 
0
for (byte b=0;b<students.length;b++){ 
    for (byte c=0;c<students.length;/*b++*/c++) 
     { 
      if (students[b][c]==2) 
        System.out.print(b+"+"+c); 
     } 
} 

OutOfBoundsException выбрасывается, потому что приращение Ь в вашем секо nd, поэтому, когда первый цикл находится в последнем запуске, вы увеличиваете b снова, а затем вне пределов.

0

Дополнительно к опечатке вы должны написать студентов [б] .length:

for (byte b=0;b<students.length;b++){ 
    for (byte c=0;students[b].length;c++) 
    { 
     ... 
    } 

, потому что вы хотите длину вложенного массива.

Смежные вопросы