特定于案例的空指针异常问题 - java
问题描述:
我有一个关于空指针异常的奇怪问题。我发布下面有问题的代码片:特定于案例的空指针异常问题 - java
public static void main(String[] args) {
BetHistory testObject = new BetHistory(6);
testObject.addResponse(2, 1, 0); // ERROR HERE
...
}
public class PlayerResponses {
public List<Integer> response;
public PlayerResponses() {
super();
response = new LinkedList<Integer>();
}
...
}
public class BetHistory {
PlayerResponses [][] responses;
int nPlayer;
public BetHistory(int totalPlayers) {
super();
responses = new PlayerResponses[4][totalPlayers];
nPlayer = totalPlayers;
}
public void addResponse(int response, int playerNo, int roundNo)
{
responses[roundNo][playerNo].response.add(response); // DUE TO HERE
}
...
}
在此先感谢您的时间。
答
在这一行:
responses = new PlayerResponses[4][totalPlayers];
您创建一个2维数组,可容纳引用PlayerResponses
对象。你不要创建一个单一的PlayerResponses
对象。
您需要填写那些在一个循环(或更高版本上的需求,如果你想):
responses[i][j] = new PlayerResponses();
答
这是因为public List<Integer> response;
在每个存储阵列中的PlayerResponses
的不被初始化。 它得到默认null
,这就是为什么当你打电话给add
方法时,你得到NPE。
答
import java.util.*;
public class A {
public static void main(String[] args) {
BetHistory testObject = new BetHistory(6);
testObject.addResponse(2, 1, 0); // ERROR HERE
}
}
class PlayerResponses {
public LinkedList<Integer> response;
public PlayerResponses() {
super();
response = new LinkedList<Integer>();
}
}
class BetHistory {
PlayerResponses [][] responses;
int nPlayer;
public BetHistory(int totalPlayers) {
super();
responses = new PlayerResponses[4][totalPlayers];
for(int i=0;i<totalPlayers;i++) {
responses[0][i] = new PlayerResponses();
responses[1][i] = new PlayerResponses();
responses[2][i] = new PlayerResponses();
responses[3][i] = new PlayerResponses();
}
nPlayer = totalPlayers;
}
public void addResponse(int response, int playerNo, int roundNo)
{
responses[roundNo][playerNo].response.add(response); // DUE TO HERE
}
}
+0
时,问题是否与特定数据一起显示?我认为在这里解决方案并不是勺子喂食(特别是当没有解释时)。 – 2011-02-28 17:04:37
Stacktrace好吗? – adarshr 2011-02-28 16:55:43
你可以发布堆栈跟踪吗?当调用'addResponse()'('2,1,0') – Argote 2011-02-28 16:57:52