2016-04-24 33 views
-2
public class Deck { 
     public static final int CARDSOFDECK = 112; 
     private Card[] cards = new Card[CARDSOFDECK]; 

      public static void main(String[] args){ 
       Deck deck = new Deck(); 
       deck.load(); 
       deck.show(); 
     } 
     public void show(){ 
      for(Card c: cards) 
       System.out.println(c.toString()); 
     } 
     public void load(){ 
      int j = 0; 
      for (j = 0; j < 2; j++) { 
       int i = 0; 
       for (Color c : Color.values()) { 
        for (Value v : Value.values()) 
         cards[i++] = new Card(c, v); 
       } 

      } 

     } 
    } 


    public class Card { 

     private Color color; 

     private Value value; 



     public Card(Color c, Value v) { 
      color = c; 
      value = v; 
     } 



      public String toString() { 
       return color + " " + value; 
      } 
     } 
public enum Color { 
     RED("Red"), YELLOW("Yellow"), BLUE("Blue"), GREEN("Green"); 

     private final String cardColor; 

     private Color(String cardColor){ 
     this.cardColor = cardColor; 
     } 

     public String getColor(){ 
     return cardColor; 
     } 
} 



public enum Value { 
     ZERO(0), ONE(1), TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), 
     SKIP(10), DRAW2(11), REVERSE(12), WILD(13), WILDDRAW4(14); 

     private final int cardValue; 

     private Value(int cardValue){ 
     this.cardValue = cardValue; 
     } 

     public int getValue(){ 
     return cardValue; 

     } 
} 

我在Deck類中繞着半個地方說toString的地方得到了nullpointerexception,我不太清楚爲什麼。我正在爲基於java的課程製作uno遊戲,並試圖獲得創建的卡片。感謝您的幫助!Deck類中的java.lang.NullPointerException

+3

'私人卡[]卡=新卡[CARDSOFDECK];'爲112張卡創建空間;但它不會創建**任何**卡片。 –

+0

@ElliottFrisch他在load()方法中創建卡片。 –

+2

@ZinMinn其中112人? –

回答

1

在下面的代碼

public void load(){ 
    int j = 0; 
    for (j = 0; j < 2; j++) { 
    int i = 0; 
    for (Color c : Color.values()) { 
     for (Value v : Value.values()) 
     cards[i++] = new Card(c, v); 
    } 
    } 
} 

您的j for循環內復位i爲0。你打算做的(我假設)是在循環外聲明它爲0,以便製作每張卡的兩個副本。要做到這一點,將其更改爲以下:

public void load(){ 
    int j = 0; 
    int i = 0; 
    for (j = 0; j < 2; j++) { 
    for (Color c : Color.values()) { 
     for (Value v : Value.values()) 
     cards[i++] = new Card(c, v); 
    } 
    } 
} 

正如一個方面說明,我想你也想擁有120卡,而不是112。15卡類型,* 4個*色2每張卡= 120。

+0

非常感謝你!你發現我的錯誤究竟在哪裏! –

+2

@BrianRobinson沒問題,樂意幫忙!如果這解決了你的問題,我會很感激,如果你接受它作爲答案。 – nhouser9

0

在您的代碼:

public void load(){ 
     int j = 0; 
     for (j = 0; j < 2; j++) { 
      int i = 0; //<-- i is reset during the next loop 
      for (Color c : Color.values()) { 
       for (Value v : Value.values()) 
        cards[i++] = new Card(c, v); 
      } 

     } 

i被在第二環路重置爲0。這意味着你的一半卡片[]不會被初始化。

public void load(){ 
     int j = 0; 
     int i = 0; // <-- move i = 0 here 
     for (j = 0; j < 2; j++) { 
      //int i = 0; //<-- i is reset during the next loop 
      for (Color c : Color.values()) { 
       for (Value v : Value.values()) 
        cards[i++] = new Card(c, v); 
      } 

     } 

另外,112不是semms有足夠的空間。

public static final int CARDSOFDECK = 120; 

會更好。

相關問題