2016-02-25 215 views
1

我的程序設計爲從一副牌中隨機抽取5張牌。然而,當我運行它時,輸出爲:系統輸出「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; 
    } 
} 

我還沒有想過如何消除繪製在同一張卡一次還多。

回答

6

,因爲這行:

void Card(){..} 

刪除void。此代碼表示方法(構造函數不描述返回類型 - 即使使用void)。所以編譯器添加了默認的無參數構造函數,它初始化cardValuenull

1

變化

無效卡(){

卡(){

這是一個constuctor沒有方法

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

構造能源部鼻涕有返回類型。所以在你的代碼中當你打電話時

comCard[i] = new Card(); 

它實際上調用了默認的構造函數,它什麼都不做。這就是爲什麼你得到空。你的價值cardValue不默認構造函數得到初始化

1

的問題是你的「構造」

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

長話短說:刪除void

-2

我認爲你可以只是做等級/套裝[rand.nextInt(排名/ suit.length)]來獲得一個隨機等級或花色

相關問題