2015-04-04 55 views
0

运行我的代码时出现不兼容的类型错误。这是“playerGuess = d1.deal();”DeckOfCards和HighLow类不兼容类型

谢谢您的高级。这个主要有两个其他类与它一起。 DeckOfCards和卡类。

卡类

public class Card 
     { 
      public final static int ACE = 1; 
      public final static int TWO = 2; 
      public final static int THREE = 3; 
      public final static int FOUR = 4; 
      public final static int FIVE = 5; 
      public final static int SIX = 6; 
      public final static int SEVEN = 7; 
      public final static int EIGHT = 8; 
      public final static int NINE = 9; 
      public final static int TEN = 10; 
      public final static int JACK = 11; 
      public final static int QUEEN = 12; 
      public final static int KING = 13; 

      public final static int CLUBS = 1; 
      public final static int DIAMONDS = 2; 
      public final static int HEARTS = 3; 
      public final static int SPADES = 4; 

      private final static int NUM_FACES = 13; 
      private final static int NUM_SUITS = 4; 

      private int face, suit; 
      private String faceName, suitName; 

      //----------------------------------------------------------------- 
      // Creates a random card. 
      //----------------------------------------------------------------- 
      public Card() 
      { 
       face = (int) (Math.random() * NUM_FACES) + 1; 
       setFaceName(); 

       suit = (int) (Math.random() * NUM_SUITS) + 1; 
       setSuitName(); 
      } 

      //----------------------------------------------------------------- 
      // Creates a card of the specified suit and face value. 
      //----------------------------------------------------------------- 
      public Card(int faceValue, int suitValue) 
      { 
       face = faceValue; 
       setFaceName(); 

       suit = suitValue; 
       setSuitName(); 
      } 

      //----------------------------------------------------------------- 
      // Sets the string representation of the face using its stored 
      // numeric value. 
      //----------------------------------------------------------------- 
      private void setFaceName() 
      { 
      switch (face) 
       { 
       case ACE: 
        faceName = "Ace"; 
        break; 
       case TWO: 
        faceName = "Two"; 
        break; 
       case THREE: 
        faceName = "Three"; 
        break; 
       case FOUR: 
        faceName = "Four"; 
        break; 
       case FIVE: 
        faceName = "Five"; 
        break; 
       case SIX: 
        faceName = "Six"; 
        break; 
       case SEVEN: 
        faceName = "Seven"; 
        break; 
       case EIGHT: 
        faceName = "Eight"; 
        break; 
       case NINE: 
        faceName = "Nine"; 
        break; 
       case TEN: 
        faceName = "Ten"; 
        break; 
       case JACK: 
        faceName = "Jack"; 
        break; 
       case QUEEN: 
        faceName = "Queen"; 
        break; 
       case KING: 
        faceName = "King"; 
        break; 
       } 
      } 

      //----------------------------------------------------------------- 
      // Sets the string representation of the suit using its stored 
      // numeric value. 
      //----------------------------------------------------------------- 
      private void setSuitName() 
      { 
       switch (suit) 
       { 
       case CLUBS: 
        suitName = "Clubs"; 
        break; 
       case DIAMONDS: 
        suitName = "Diamonds"; 
        break; 
       case HEARTS: 
        suitName = "Hearts"; 
        break; 
       case SPADES: 
        suitName = "Spades"; 
        break; 
       } 
      } 

      //----------------------------------------------------------------- 
      // Determines if this card is higher than the passed card. The 
      // second parameter determines if aces should be considered high 
      // (beats a King) or low (lowest of all cards). Uses the suit 
      // if both cards have the same face. 
      //----------------------------------------------------------------- 
      public boolean isHigherThan(Card card2, boolean aceHigh) 
      { 
       boolean result = false; 

       if (face == card2.getFace()) 
       { 
       if (suit > card2.getSuit()) 
        result = true; 
       } 
       else 
       { 
       if (aceHigh && face == ACE) 
        result = true; 
       else 
        if (face > card2.getFace()) 
         result = true; 
       } 

       return result; 
      } 

      //----------------------------------------------------------------- 
      // Determines if this card is higher than the passed card, 
      // assuming that aces should be considered high. 
      //----------------------------------------------------------------- 
      public boolean isHigherThan(Card card2) 
      { 
       return isHigherThan(card2, true); 
      } 

      //----------------------------------------------------------------- 
      // Returns the face (numeric value) of this card. 
      //----------------------------------------------------------------- 
      public int getFace() 
      { 
       return face; 
      } 

      //----------------------------------------------------------------- 
      // Returns the suit (numeric value) of this card. 
      //----------------------------------------------------------------- 
      public int getSuit() 
      { 
       return suit; 
      } 

      //----------------------------------------------------------------- 
      // Returns the face (string value) of this card. 
      //----------------------------------------------------------------- 
      public String getFaceName() 
      { 
       return faceName; 
      } 

      //----------------------------------------------------------------- 
      // Returns the suit (string value) of this card. 
      //----------------------------------------------------------------- 
      public String getSuitName() 
      { 
       return suitName; 
      } 

      //----------------------------------------------------------------- 
      // Returns the string representation of this card, including 
      // both face and suit. 
      //----------------------------------------------------------------- 
      public String toString() 
      { 
       return faceName + " of " + suitName; 
      } 
     } 

卡类的甲板

public class DeckOfCards 
    { 

    private Card[] myCardDeck;   
    private int nowCard;    

    public DeckOfCards()   { 
    myCardDeck = new Card[ 52 ]; 

    int i = 0; 

    for (int suit = Card.SPADES; suit <= Card.DIAMONDS; suit++) 
     for (int pos = 1; pos <= 13; pos++) 
     myCardDeck[i++] = new Card(suit, pos);  
    nowCard = 0; 
    } 

    public void shuffle(int n) 
    { 
    int i, j, k;  
    for (k = 0; k < n; k++) 
    { 
     i = (int) (52 * Math.random()); 
     j = (int) (52 * Math.random());  
     Card tmp = myCardDeck[i]; 
     myCardDeck[i] = myCardDeck[j]; 
     myCardDeck[j] = tmp;; 
    } 

    nowCard = 0; 
    } 

     public Card deal() 
     { 
    if (nowCard < 52) 
     { 
     return (myCardDeck[ nowCard++ ]); 
     } 
     else 
     { 
      System.out.println("No Cards BRUH"); 
      return (null); 
     }  
     } 

    public String toString() 
     { 
    String s = ""; 
    int Q = 0; 
    for (int i = 0; i < 4; i++) 
    { 
     for (int j = 1; j <= 13; j++) 
     s += (myCardDeck[Q++] + " "); 

     s += "\n"; 
    } 
    return (s); 
     } 

     public int deckSize() 
     { 
     for(int z =0; z < myCardDeck.length && z < 52; z++); 

     return myCardDeck.length; 
     } 
} 

主要的驱动程序类(HighLow)

import java.util.*; 
public class HighLow 
    { 
     public static void main (String [] args) 
     { 

     DeckOfCards d1 = new DeckOfCards(); 
     Scanner scan = new Scanner(System.in); 
     String playerGuess; 
     Card firstDeal, secondDeal; 
     int count =0; 
     d1.shuffle(1); 
     firstDeal = d1.deal(); 

     while(true) 
      { 
       if(d1.deckSize() == 0); 
       { 
        System.out.print("Game over! Score: " + count); 
        break; 
       } 

     System.out.print(firstDeal); 
     System.out.print("Guess if next card will be a high card, or a low card!"); 
     System.out.print("Use H or L"); 
     playerGuess = d1.deal(); 

     if(secondDeal.isHigherThan(firstDeal)&&playerGuess.equals("H")) 
      { 
       System.out.print("Nice!!!!"); 
       count++; 
       firstDeal=secondDeal; 
      } 

     else if(firstDeal.isHigherThan(secondDeal) && playerGuess.equals("L")) 
      { 
       System.out.println("NICE!!!!"); 
       count++; 
       firstDeal = secondDeal; 
      } 

     else if (firstDeal.isHigherThan(secondDeal) && playerGuess.equals("L")) 
      { 
       System.out.print("Good Job!!!!"); 
       count++; 
       firstDeal = secondDeal; 
      } 
     else 
      { 
       System.out.println("Sorry, the game is over. But your score is! " + count); 
       break; 
      } 
    } 
    }} 

谢谢!

+1

当你研究了错误信息,你发现了什么? – 2015-04-04 01:16:46

+0

'DeckofCards.deal()'返回一个'Card'对象。你把'playerGuess'声明为'String'。 – Phylogenesis 2015-04-04 01:18:51

回答

1

deal()返回Card方法:

public Card deal() { ... } 

变量playerGuessString

String playerGuess; 

您无法分配CardString

playerGuess = d1.deal(); // incompatible types 

它看起来像你想playerGuess存储用户输入,所以它应该是:

playerGuess = scan.next();