我的任務是創建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());
}
您可以顯示其他類,因爲問題可能在其中之一? – Jason
你已經在Game類的構造函數中用默認的手創建了兩層。所以當你使用實例時,toString()。 IT打印默認手牌,因爲您已用默認手牌創建它們。你創建的玩家p1和p2與他們不同。他們已經創建了名稱,但你沒有用它們來打印 –
在那裏,我添加了玩家類的代碼和toString請求。這就是默認手來自 – user2827773