嵌套类中对象的数组

时间:2012-02-27 11:59:29

标签: java arrays nullpointerexception nested

我即将开一个关于解析的课程,这是我的代码的一部分。

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效果很好!

但我不明白为什么setpackTotalsetpackBrand无效。

非常感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

Java中的数组是零索引,尝试将i方法中的process变量更改为从0开始:

int i = 0;
while ( ... ) { 
   ...
   i++;
}

答案 1 :(得分:0)

忽略这里缺少)

setpackTotal(i, scanner.nextInt();

由于NullPointerException

,可能会导致scanner.nextInt()

尝试调试scanner以解决问题。

此外,Peter's answer解决了部分问题。

答案 2 :(得分:-1)

您需要将setpackTotal()更改为:

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