2013-10-04 206 views
1

我的任務是創建4個java類來啓動一個cribbage遊戲項目。我已經完成了其中的3個,並且最後一個只有一個toString錯誤。toString錯誤返回錯誤的結果

這裏是我的遊戲類的代碼

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 = new Player("?"); 
     player2 = new Player("?"); 
     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; 
    } 

//-----------utility methods------------ 

    public String toString() { 
     return "Game between " + player1 + " and " + player2; 
    } 

} 

這裏是我的testToString代碼

public void testToString() { 
     System.out.println("toString"); 
     Game instance = new Game(); 
     Player p1 = new Player("Jim"); 
     p1.setHand(hand1); 
     Player p2 = new Player("George"); 
     p2.setHand(hand2); 
     assertEquals("Game between ? (0) and ? (0)", instance.toString()); 
     instance.setPlayer1(p1); 
     assertEquals("Game between Jim (0) and ? (0)", instance.toString()); 
     instance.setPlayer2(p2); 
     assertEquals("Game between Jim (0) and George (0)", instance.toString()); 
    } 

是我得到的錯誤是:

Failed: expected <Game between ?([0) and ? (0)]> 
but was: Game between ? ([AC, AC, AC, AC, AC, AC) @0 and ? (AC, AC, AC, AC, AC, AC) @ 0]> 

注 - 交流AC AC AC AC AC是上一班的默認指定手。我只是困惑,爲什麼PLAYER1和player2正在返回默認的雙手,而不是名字

這裏是我的播放器類

/* 
* player class 
*/ 
package model; 

public class Player implements CribbageConstants { 

    //-----fields------ 
    private String name; 
    private Hand hand; 
    private int position; 

    //---------- Constructors --------- delete constructors for 33.3% 
    /** 
    * No argument constructor - set default values for card 
    */ 
    public Player() { 
     name = "?"; 
     hand = new Hand(); 
     position = 0; 
    } 

    // convenience constructor 
    public Player(String name) { 
     this.name = name; 
     hand = new Hand();  
    } 

    //------mutator----- 
    public void setName(String name) { 
     this.name = name; 
    } 

    public void setHand(Hand hand) { 
     this.hand = hand; 
    } 

    public void setPosition(int position) { 
     this.position = position; 
    } 
    //-------------- Utility methods -------------- 

    /** 
    * Provide a text representation of a hand. 
    * 
    * @return the hand's cards 
    */ 
    public String getName() { 
     return name; 
    } 

    public Hand getHand() { 
     return hand; 
    } 

    public int getPosition() { 
     return position; 
    } 

//-----------utility methods------------ 
    public String toString() { 
     return name + " (" + hand + ")" + " @ " + position; 
    } 
} 

的代碼,這裏是我的toString播放器代碼

public void testToString() { 
     System.out.println("toString"); 
     Player instance = new Player(); 
     assertEquals("? (AC, AC, AC, AC, AC, AC) @ 0", instance.toString()); 
     instance.setName("Alexander"); 
     instance.setHand(hand2); 
     instance.setPosition(50); 
     assertEquals("Alexander (7H, 8C, QS, AH, 4D, 4S) @ 50", instance.toString()); 
    } 
+0

您可以顯示其他類,因爲問題可能在其中之一? – Jason

+0

你已經在Game類的構造函數中用默認的手創建了兩層。所以當你使用實例時,toString()。 IT打印默認手牌,因爲您已用默認手牌創建它們。你創建的玩家p1和p2與他們不同。他們已經創建了名稱,但你沒有用它們來打印 –

+0

在那裏,我添加了玩家類的代碼和toString請求。這就是默認手來自 – user2827773

回答

0
  1. 類不需要Game類的內部類型遊戲的屬性。
  2. 您需要將新創建的玩家分配給您的遊戲,然後才能夠toString()它們。
+0

那我到底該做什麼?我真的不確定。 – user2827773

+0

你的第一個斷言應該是:assertEquals(「AC(AC,AC,AC,AC,AC,AC)@ 0和AC(AC,AC,AC,AC,AC,AC)@ 0之間的遊戲」,instance.toString ()); – Jason

+0

您的'(0)'應該是默認或實際的手,具體取決於您在測試中的位置。 – Jason