2014-10-09 22 views
0
import java.lang.*; 

public class Card 
{ 
    String face, suit; 
    int value; 


    public Card (String a, String b) 
    { 
     face = a; 
     suit = b; 
     faceValue(face); 
    } 

    public void faceValue(String abc) 
    { 
     if (abc.equals("Jack") || abc.equals("Queen") || abc.equals("King")) 
     { 
     value = 10; 
     } 
     else if (abc.equals("Ace")) 
     { 
     value = 11; 
     } 
     else 
     { 
      value = Integer.parseInt(abc); 
     } 
    } 

    public String toString() 
    { 
     return face + " of " + suit + "\nValue of: " + value; 
    } 

    public int getValue() 
    { 
     return value; 
    } 

    public static void main(String [] args) 
    { 

     Deck deck = new Deck(); 
     deck.fillDeck(); 
     System.out.println(deck.toString()); 
    } 
} 
class Deck 
{ 
    Card [] cards; 
    String [] faces = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"}; 
    int counter = 0; 
    String deckList; 

    public Deck() 
    { 
     cards = new Card[52]; 
    } 

    public void fillDeck() 
    { 
     for (int i = 0; i <= 12; i++) 
     { 
     cards[i] = new Card(faces[counter], "Hearts"); 
     counter++; 
     } 

    counter = 0; 

     for (int i = 0; i >= 13 && i <= 25; i++) 
     { 
     cards[i] = new Card(faces[counter], "Diamonds"); 
     counter++; 
     } 

    counter = 0; 

     for (int i = 0; i >= 26 && i <= 38; i++) 
     { 
     cards[i] = new Card(faces[counter], "Clubs"); 
    counter++; 
     } 

    counter = 0; 

     for (int i = 0; i >= 39 && i <= 51; i++) 
     { 
     cards[i] = new Card(faces[counter], "Spades"); 
    counter++; 
     } 

    } 

    public String toString() 
    { 
     for (int i = 0; i <= 51; i++) 
     { 
     deckList = cards[i].getValue() + " "; 
     } 
     return deckList; 
    } 

} 

這是我得到的錯誤,我不確定它是什麼。從之前的parseInt()也有一些問題,也許它與此有關?這門課被設計爲用於黑色傑克遊戲,但我似乎無法通過這個錯誤,任何幫助表示讚賞。Card和Deck類的NullPointerException錯誤

Exception in thread "main" java.lang.NullPointerException 
    at Deck.toString(Card.java:100) 
    at Card.main(Card.java:47) 
+0

嘗試使用調試器的一些運行時的值調試它,你也會自動從哪裏知道的異常來了。 – 2014-10-09 03:08:20

+0

有另一個看看ur for循環的初始化和使用方式。 – 2014-10-09 03:12:59

回答

0

問題是甲板沒有得到初始化,因爲For loop是不正確的。

你的循環是這樣filDeck方法中:

for (int i = 0; i >= 39 && i <= 51; i++) 
     { 
     cards[i] = new Card(faces[counter], "Spades"); 
    counter++; 
     } 

但是當你intialise i = 0,這將永遠不會運行。所以我的第一個值將不符合條件i >= 39 && i <= 51並且循環會中斷。

我寧願把這個for循環:

for (int i = 51; i >= 39; i--) 
      { 
      cards[i] = new Card(faces[counter], "Spades"); 
     counter++; 
      } 
0

for循環的每個人開始以i = 0。您需要將其更改爲條件的下限,否則for循環將無法運行。

例如:讓通過最後一個

for(int i=0; i >=39 && i <=51; i++) 

I = 0,> = 39 & &我< = 51步驟?不,不要for循環進入

將其更改爲:

(int i = 39; i >= 39 && i <= 51; i++)