系统输出" null"而不是所需的字符串

时间:2016-02-25 02:15:36

标签: java string

我的程序旨在从一包卡片中随机抽取5张卡片。但是,当我运行它时,输出是:

  

null null null null null

public class Poker {
    static int numberOfPlayers;

    public static void main(String[] args) {
        drawComCards();
    }

    static void drawComCards() {
        Card[] comCard = new Card[5];
        for (int i = 0; i < comCard.length; i++)
            comCard[i] = new Card();

        for (int i = 0; i < comCard.length; i++)
            System.out.print(comCard[i].getCard() + "  ");
    }
}

public class Card {
    private String[] rank = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
    private String[] suit = {"clubs", "diamonds", "hearts", "spades"};
    private String cardValue;

    void Card() {
        String cardOne = rank[(int) (Math.random() * rank.length)] + " of " + suit[(int) (Math.random() * suit.length)];
        cardValue = cardOne;
    }

    String getCard() {
        return cardValue;
    }
} 

我还没想过如何消除多次使用同一张卡片。

5 个答案:

答案 0 :(得分:6)

因为这一行:

void Card(){..}

删除void。此代码表示方法(构造函数不描述返回类型 - 即使使用void)。因此,编译器添加了默认的无参数构造函数,该构造函数使用cardValue初始化null

答案 1 :(得分:1)

更改

void Card(){

卡(){

它是一个构造函数而不是方法

答案 2 :(得分:1)

问题是你的&#34;构造函数&#34;

Parallel.For(0, 5, x => 
{
    foreach (long value in blockingCollection.GetConsumingEnumerable())
    {
        total[x] += 1;
        Console.WriteLine("Worker {0}: {1}", x, value);
    }
});

由于声明中的void Card() { String cardOne = rank[(int) (Math.random() * rank.length)] + " of " + suit[(int) (Math.random() * suit.length)]; cardValue = cardOne; } ,它实际上是一个恰好与构造函数同名的方法,并且因为没有构造函数,所以添加了一个默认构造函数(这就是为什么void仍然有效)。但默认构造函数不会初始化comCard[i] = new Card();,因此在打印时它是cardValue

长话短说:删除null

答案 3 :(得分:0)

我刚刚测试了你的代码,你的随机就好了。但你没有构造函数。 这是一个方法而不是构造函数

void Card(){
    String cardOne = rank[(int)(Math.random()*rank.length)] + " of " + suit[(int)(Math.random()*suit.length)];
    cardValue = cardOne;
}

构造函数就像轰鸣声

public Card(){
    String cardOne = rank[(int)(Math.random()*rank.length)] + " of " + suit[(int)(Math.random()*suit.length)];
    cardValue = cardOne;
}

构造函数doe snot有返回类型。所以在你的代码中打电话

comCard[i] = new Card();

它实际上调用默认构造函数,它什么都不做。这就是你得到null的原因。您的值cardValue未在默认构造函数

中初始化

答案 4 :(得分:-2)

我认为你可以做排名/西装[rand.nextInt(rank / suit.length)]来获得随机排名或套装