我的程序旨在从一包卡片中随机抽取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;
}
}
我还没想过如何消除多次使用同一张卡片。
答案 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)]来获得随机排名或套装