我今天的问题是,如何为我的状态变量/方法指定值,以便比较值以确定获胜者? 另外,如何将值指向“Jack”和“Jill”(播放器p1和p2)?
我应该使用if-else语句吗?
最后一个问题:为什么我的控制台为我的getScore,getcardSuit,getcardValue等打印“null”? (在所有这些之后我会给你我的控制台打印输出)
这是我的“播放器类”的代码,我的“测试人员”项目低于此代码(测试我的播放器类):
public class player {
// The two players are going to enter:
String p1[] = {"Jack", "h", "k"};
String p2[] = {"Jill", "d", "9"};
//Setting up values
String Jack = "Jack";
String Jill = "Jill";
String h = " Hearts ";
String d = " Diamonds ";
String k = " King ";
int val = 9;
// Score
public int score = 0; // State variable score, set equal to 0
// Player name - Jack, Jill
public player(String Jack, String h, String k) {
// TODO Auto-generated constructor stub
}
public String playerName(String player)
{
player = "Jack";
player = "Jill";
return player;
}
// Card suit
public String cardSuit(String getcardSuit)
{
return cardSuit;
}
// Card Value for player 1
public String getCardValue()
{
return cardValue;
}
public String getScore(String score)
{
return score;
}
public String player;
public String playerName;
public String cardSuit;
public String cardValue;
public double getScore;
public String getCardSuit()
{
return cardSuit;
}
public int getScore() {
return 0;
}
}
这是我的“测试员”,来测试我的“玩家类”:
public class Tester {
public static void main(String[] args) {
// Create an object for player 1
player p1 = new player("Jack", "h", "k");
// Create an object for player 2
player p2 = new player("Jill", "d", "9");
// Use p1 object and methods getCardSuit and getCardValue to report p1's card
System.out.println(p1.playerName+"'s card is a "+p1.getCardValue()+" of "+p1.getCardSuit()+".");
// Should print:
// Jack's card is a King of Hearts.
// Use p2 object and methods getCardSuit and getCardValue to report p2's card
System.out.println(p2.playerName+"'s card is a "+p2.getCardValue()+" of "+p2.getCardSuit()+".");
// Should print:
// Jill's card is a 9 of Diamonds.
// Compare player's scores to determine winner
if(p1.getScore()>p2.getScore())
System.out.println(p1.playerName+" is the winner!");
else if (p1.getScore()<p2.getScore());
System.out.println(p2.playerName+" is the winner!");
// Should print:
// "Jack is the winner!"
}
}
CONSOLE:
null的卡是null的null。 null的卡是null的null。 null是赢家!
答案 0 :(得分:2)
我首先回答你问的问题:
值为null,因为它们从未初始化。 player
类的构造函数:
public player(String Jack, String h, String k) {
// does absolutely nothing with the values.
}
什么都不做。这意味着您创建了一个新玩家player1
和一个新玩家player2
,但实际上并没有使用这些值来做任何事情。
player p1 = new player("Jack", "h", "k");
调用构造函数,发送值并忽略值。创建了一个player1的实例,并且对该信息一无所知。因此,您无法将这些值相互比较,因为它们尚未初始化。
其他注意事项
当你创建一个类时,在面向对象编程中你应该以一种OO的方式思考。
播放器类可以/应该有一个String name;
变量,然后您可以创建一个Player对象并传递名称,就像您一样。不同之处在于构造函数:
//Setting up values
String name;
String suit;
String value;
public player(String name, String suit, String value) {
this.name = name;
this.suit = suit;
this.value = value;
}
此技术创建一个带有名称,套装和值的player1对象。现在可以将此对象中的值与另一个玩家对象中的相等值进行比较。
答案 1 :(得分:0)
所以我试着稍微清理你的Player类:
public class Player
{
// The two players are going to enter:
String p1[] = {"Jack", "h", "k"};
String p2[] = {"Jill", "d", "9"};
//Setting up values
String jack = "Jack";
String jill = "Jill";
String h = " Hearts ";
String d = " Diamonds ";
String k = " King ";
int val = 9;
// Score
public int score = 0; // State variable score, set equal to 0
// Player name - Jack, Jill
public Player(String jack, String h, String k)
{
this.jack = jack;
this.h = h;
this.k = k;
}
public String playerName(String player)
{
// not sure what this is doing?
// this first line does nothing at all
// because player gets reassigned to "Jill"
player = "Jack";
player = "Jill";
return player;
}
// Card suit
public String cardSuit(String getcardSuit)
{
return cardSuit;
}
// Card Value for player 1
public String getCardValue()
{
return cardValue;
}
public String getScore(String score)
{
return score;
}
public String player;
public String playerName;
public String cardSuit;
public String cardValue;
public double getScore;
public String getCardSuit()
{
return cardSuit;
}
public int getScore()
{
return 0;
}
}
您应该开始使用一些约定。类名应以大写字母开头。变量和类似的东西都应该有小写字母(除非它是静态的)。