“战争”牌游戏生成器问题,使用类和对象(java 7)

时间:2014-03-09 21:41:16

标签: java

我今天的问题是,如何为我的状态变量/方法指定值,以便比较值以确定获胜者? 另外,如何将值指向“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是赢家!

  • 我怎样才能修复这个“空”的东西并实际打印出它们的值? 非常感谢,提前! :)

2 个答案:

答案 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;
    }
}

您应该开始使用一些约定。类名应以大写字母开头。变量和类似的东西都应该有小写字母(除非它是静态的)。