特定于案例的空指针异常问题 - 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 
    } 

... 

} 

在此先感谢您的时间。

+0

Stacktrace好吗? – adarshr 2011-02-28 16:55:43

+0

你可以发布堆栈跟踪吗?当调用'addResponse()'('2,1,0') – Argote 2011-02-28 16:57:52

在这一行:

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