运行代码时出现不兼容的类型错误。当“ playerGuess = d1.deal();”时

在此先感谢您。这个主体还有另外两个类。 DeckOfCards和Cards类。

卡类

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


谢谢!

最佳答案

方法deal()返回Card

public Card deal() { ... }


变量playerGuessString

String playerGuess;


您不能将Card分配给String

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


看起来您想要playerGuess存储用户输入,因此应为:

playerGuess = scan.next();

10-08 15:17