2013-10-04 61 views
0

我實際上得到了三個java.langNullPointerException錯誤,但其中兩個是相同的,所以如果我修復一個,我會修復另一個。兩個java.lang.NullPointerException錯誤

我試圖做一個遊戲類傳遞一個的GameTest

這裏是我的遊戲類

public class Game implements CribbageConstants { 

    private Player player1, player2; 
    private boolean player1Deals; 
    private Game game; 

    /** 
    * No argument constructor - set default values for Game 
    */ 
    public Game() { 
     player1 = player1; 
     player1 = player2; 
     player1Deals = true; 



    } 

    // convenience constructor 
    public Game(Player player1, Player player2) { 
     this.player1 = player1; 
     this.player2 = player2; 
     this.player1Deals = true; 

    } 

    //mutator 
    public void setPlayer1(Player player1) { 
     this.player1 = player1; 

    } 

    public void setPlayer2(Player player2) { 
     this.player2 = player2; 
    } 

    public void setPlayer1Deals(boolean player1Deals) { 
     this.player1Deals = player1Deals; 
    } 

    public void setGame(Game game) { 
     this.game = game; 
    } 

    //utility methods 
    public Player getPlayer1() { 
     return player1; 
    } 

    public Player getPlayer2() { 
     return player2; 
    } 

    /** 
    * @return the player1Deals 
    */ 
    public boolean isPlayer1Deals() { 
     return player1Deals; 
    } 

    /** 
    * @return the game 
    */ 
    public Game getGame() { 
     return game; 
    } 
} 

我得到以下的代碼行86 NullPointerException異常一個的代碼:

//79 public void testSetPlayer1() { 
//80  System.out.println("setPlayer1"); 
//81  Game instance = new Game(); 
//82  Player p1 = new Player("Jim"); 
//83  p1.setHand(hand1); 
//84  Player p2 = new Player("George"); 
//85  p2.setHand(hand2); 
//86  assertEquals("?", instance.getPlayer1().getName()); 
//87  instance.setPlayer1(p1); 
//88  assertEquals("Jim", instance.getPlayer1().getName()); 
    } 

我在我的testNoArgConstructor得到一個NullPointerException異常(54行)

//51 public void testNoArgConstructor() { 
//52  System.out.println("Game"); 
//53  Game instance = new Game(); 
//54  assertEquals("?", instance.getPlayer1().getName()); 
//55  assertEquals("?", instance.getPlayer2().getName()); 
//56  assertEquals(true, instance.isPlayer1Deals()); 
//57 } 
+0

不要忘記創建和對象u使用關鍵字'new'你剛剛不分配進不去。在默認的構造函數只是分配這些2名玩家'新球員();',看看這可能有助於 – Manny265

回答

1

您還沒有設置變量player1以前instance.getPlayer()`

//79 public void testSetPlayer1() { 
//80  System.out.println("setPlayer1"); 
//81  Game instance = new Game(); 
//82  Player p1 = new Player("Jim"); 

      instance.setPlayer1(p1); 

//83  p1.setHand(hand1); 
//84  Player p2 = new Player("George"); 
//85  p2.setHand(hand2); 
//86  assertEquals("?", instance.getPlayer1().getName()); 
//87  instance.setPlayer1(p1); 
//88  assertEquals("Jim", instance.getPlayer1().getName()); 
    } 

您在這兩種情況下相同的問題。

//51 public void testNoArgConstructor() { 
//52  System.out.println("Game"); 
//53  Game instance = new Game(); 

      instance.setPlayer1(new Player("Player One"); 
//54  assertEquals("?", instance.getPlayer1().getName()); 

      instance.setPlayer2(new Player("Player Two"); 
//55  assertEquals("?", instance.getPlayer2().getName()); 
//56  assertEquals(true, instance.isPlayer1Deals()); 
//57 } 

如果您不能編輯您的測試情況下,你可以試試默認值變量Game

public Game() { 
     player1 = new Player("?"); 
     player1 = new Player("?"); 
     player1Deals = true; 



    } 
+0

@MadProgrammer「手指」:/ !! – TheKojuEffect

+0

我的問題是,我不能編輯其中的GameTest。我只能更改類 – user2827773

+0

@ user2827773所以,要麼你的測試或你的代碼是錯誤的。您是否嘗試過創建默認constrcutor「虛擬」的玩家... – MadProgrammer

0

您已經創建了一個遊戲的實例,但是你從來沒有任何實例化球員,所以當你使用getPlayer1(),沒有玩家。

因此,在創建遊戲之後但在引用getPlayer()之前,請致電instanse.setPlayer1(new Player());

0

以一個短的走辦公桌檢查...

Game instance = new Game(); 
// instance.player1 and instance.player2 are null... 

Player p1 = new Player("Jim"); 
p1.setHand(hand1); 
Player p2 = new Player("George"); 
p2.setHand(hand2); 

// instance.player1 and instance.player2 are still null... 
// Break here... 
assertEquals("?", instance.getPlayer1().getName()); 
instance.setPlayer1(p1); 

如果你要改變你的代碼看起來更像...

Game instance = new Game(); 

Player p1 = new Player("Jim"); 
p1.setHand(hand1); 
Player p2 = new Player("George"); 
p2.setHand(hand2); 

instance.setPlayer1(p1); 
assertEquals("?", instance.getPlayer1().getName()); 

你可能有更多的成功.. 。

這...

Game instance = new Game(); 
assertEquals("?", instance.getPlayer1().getName()); 
assertEquals("?", instance.getPlayer2().getName()); 
assertEquals(true, instance.isPlayer1Deals()); 

是同一個問題的症狀,既instance.player1instance.player2null

我「覺得」你的困惑是從熱氣騰騰......

public Game() { 
    player1 = player1; 
    player1 = player2; // Not sure if this is correct... 
    player1Deals = true; 
} 

分配無關,沒有什麼是仍然沒有...

這實際上是一樣的說...

public Game() { 
    player1 = null; 
    player1 = null; 
    player1Deals = true; 
} 
0

我覺得你getPlayer1()˚F聯合是Player類型,所以你應該使用p1.getPlayer1()。您instanceGame()類型。而且,我認爲你的功能getName()應該定義爲Player類型。

相關問題