Массив из объекта во вложенном классе - PullRequest
1 голос
/ 27 февраля 2012

Я собираюсь сделать урок о разборе, вот часть моего кода.

public class Parsing {

   //some other atributes here

   public class Pack {
       String type;
       int[] brand;
       int total;
   }

   Pack[] v = new Pack[25];    

   public void setpackType(int a, String b) {
       v[a].type = b;
   }

   public String getpackType(int a) {
       return v[a].type;
   }

   public int getpackTotal(int a) {
       return v[a].total;
   }

   public void setpackTotal(int a, int b) {
       v[a].total = b;
   }

   public void setpackBrand(int a, int b, int c) {
       v[a].brand[b] = c;
   }

и

   public final void process(String s) throws FileNotFoundException {
       Scanner scanner;
       scanner = new Scanner(new File(s));
       try {
           if (scanner.hasNext()) {
               int y = scanner.nextInt();
               int i = 1;
               while (i <= y) {
                   v[i] = new Pack();
                   setpackType(i, scanner.next());
                   setpackTotal(i, scanner.nextInt();
                   int k = 0;
                   while (k < hh) {
                       setpackBrand(i, k, scanner.nextInt());
                   k++;
                   }
                   i++;
               }
           }
       } finally{
           scanner.close();
       }
   }
}

Он скомпилирован без ошибок, но при попытке запуститьЯ получил это:

    Exception in thread "main" java.lang.NullPointerException
    at Parsing.setpackTotal(Parsing.java:112)
    at Parsing.process(Parsing.java:153)
    at Parsing.main(Parsing.java:202)

Я уже проверял это построчно.setpackType отлично работает!

Но я не понимаю, почему setpackTotal И setpackBrand не может работать.

Большое спасибо за помощь:)

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Массивы в Java проиндексированы нулями, попробуйте изменить переменную i в вашем методе process, чтобы начать с 0 вместо:

int i = 0;
while ( ... ) { 
   ...
   i++;
}
0 голосов
/ 27 февраля 2012

Игнорирование пропущенного ) здесь:

setpackTotal(i, scanner.nextInt();

NullPointerException может быть вызвано из-за scanner.nextInt().

Попробуйте отладить scanner для решения проблемы.

Кроме того, Ответ Питера решает часть проблемы.

0 голосов
/ 27 февраля 2012

Вам нужно изменить setpackTotal() на:

public void setpackTotal(int a, int b) {
    v[a] = new Pack();
    v[a].total=b;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...