2012-09-21 24 views
1

我的代码示出了零指示字例外,当我赋值为int在对象阵列:空指针异常分配值时为int阵列

public class Cage { 
    int Value; 
    String Operator; 
    int[] placeHolders; 
} 

Cage o = new Cage();     
o.Value = Integer.parseInt(strSplit[0]); 
o.Operator = strSplit[1];    
for(int i=2;i<strSplit.length;i++) { 
    o.placeHolders[i] = Integer.parseInt(strSplit[i]); 
} 
+7

你在哪里初始化'placeHolders'使它不是'null'? –

+1

您应该阅读Java教程的[Arrays](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html)部分,特别是关于*声明变量以引用数组的部分*然后*创建,初始化和访问数组* – mikej

回答

4

您应该创建一个int阵列为您placeHolders,它只是一个声明,而不是定义现在。

o.placeHolders = new int[strSplit.length]; 
+0

就像一个魅力工作..谢谢.. :) – CodeMonkey

+0

你可以使'strSplit.length - 2'数组的大小作为'strSplit'中的前2个元素不在'placeHolders'中。 – mikej

+0

但是在这种情况下,数组索引应该改变,在这个例子中它不是基于零的。 –

0

您应该使用它之前实例中的int []对象:

int[] placeHolders = new int[100]; 
+0

int [100]是硬编码..我想不是一个很好的风格。 thx帮助虽然 – CodeMonkey

+0

@ V.J。你应该使用一个列表:列表 placeHolders = new ArrayList (); – m3th0dman

+0

但是在这种情况下,一个数组很好,因为你知道'strSplit'长度所需的大小。 – mikej

2

我猜你想有placeHolders没有在第一个指标null值保存值。

o.placeHolders = new int[strSplit.length - 2]; 
for (int i = 0; i < strSplit.length - 2; i++) { 
    o.placeHolders[i] = Integer.parseInt(strSplit[i + 2]); 
} 
+0

其确切的事情我做了:) – CodeMonkey