簡體   English   中英

為什么我收到此錯誤? “二元運算符的錯誤操作數類型'>'”

[英]Why am I getting this error? “bad operand types for binary operator '>'”

我想知道它導致“二元運算符'>'的錯誤操作數類型錯誤的原因下面我有我的手牌類的代碼。 我還指定了導致錯誤的行。 謝謝您的幫助。 這是一個BlackJack項目。

import java.util.Vector;

public class Hand {

private Vector hand;   // The cards in the hand.

public Hand() {
       // Create a Hand object that is initially empty.
  hand = new Vector();
}

public void clear() {
     // Discard all the cards from the hand.
  hand.removeAllElements();
}

public void addCard(PlayingCard c) {
     // Add the card c to the hand.  c should be non-null.  (If c is
     // null, nothing is added to the hand.)
  if (c != null)
     hand.addElement(c);
}

public void removeCard(PlayingCard c) {
     // If the specified card is in the hand, it is removed.
  hand.removeElement(c);
}

public void removeCard(int position) {
     // If the specified position is a valid position in the hand,
     // then the card in that position is removed.
  if (position >= 0 && position < hand.size())
     hand.removeElementAt(position);
}

public int getCardCount() {
     // Return the number of cards in the hand.
  return hand.size();
}

public PlayingCard getCard(int position) {
      // Get the card from the hand in given position, where positions
      // are numbered starting from 0.  If the specified position is
      // not the position number of a card in the hand, then null
      // is returned.
  if (position >= 0 && position < hand.size())
     return (PlayingCard)hand.elementAt(position);
  else
     return null;
}

 public void sortBySuit() {
     // Sorts the cards in the hand so that cards of the same suit are
     // grouped together, and within a suit the cards are sorted by value.
     // Note that aces are considered to have the lowest value, 1.
  Vector newHand = new Vector();
  while (hand.size() > 0) {
     int pos = 0;  // Position of minimal card.
     PlayingCard c = (PlayingCard)hand.elementAt(0);  // Minumal card.


    for (int i = 1; i < hand.size(); i++) {
        PlayingCard c1 = (PlayingCard)hand.elementAt(i);

        *if ( c1.getCardFace() > c.getCardFace() ||
                (c1.getCardFace().equals(c.getCardFace()) && c1.getFaceValue() < c.getFaceValue()) ) {*
            pos = i;
            c = c1;
        }
     }
     hand.removeElementAt(pos);
     newHand.addElement(c);
  }
  hand = newHand;
}

public void sortByValue() {
     // Sorts the cards in the hand so that cards of the same value are
     // grouped together.  Cards with the same value are sorted by suit.
     // Note that aces are considered to have the lowest value, 1.
  Vector newHand = new Vector();
  while (hand.size() > 0) {
     int pos = 0;  // Position of minimal card.
     PlayingCard c = (PlayingCard)hand.elementAt(0);  // Minumal card.
     for (int i = 1; i < hand.size(); i++) {
        PlayingCard c1 = (PlayingCard)hand.elementAt(i);

        *if ( c1.getFaceValue() < c.getFaceValue() ||
                (c1.getFaceValue() == c.getFaceValue() && c1.getCardFace() > c.getCardFace()) ) {*
            pos = i;
            c = c1;
        }
     }
     hand.removeElementAt(pos);
     newHand.addElement(c);
  }
  hand = newHand;
}

 }

錯誤在行的類中

if ( c1.getCardFace() > c.getCardFace() ||
                (c1.getCardFace().equals(c.getCardFace()) &&     c1.getFaceValue() < c.getFaceValue()) ) {

if ( c1.getFaceValue() < c.getFaceValue() ||
                (c1.getFaceValue() == c.getFaceValue() && c1.getCardFace() > c.getCardFace()) ) {

這是

public class PlayingCard
{
// Instance Data - all things common to all cards
private String cardFace; // king, q, j, 10 - 2, A
private int faceValue; // numberic value of the card
private char cardSuit; // hold suit of the card
private char suits[] = {(char)(003), (char)(004), (char)(005), (char)(006)};

// Constructor
public PlayingCard(int value, int suit)
{
    faceValue = value;
    setFace();
    setSuit(suit);
}

// helper setFace()
public void setFace()
{
    switch(faceValue)
    {
        case 1:
            cardFace = "A";
            faceValue = 14;
            break;
        case 11:
            cardFace = "J";
            break;
        case 12:
            cardFace = "Q";
            break;
        case 0:
            cardFace = "K";
            faceValue = 13;
            break;
        default:
            cardFace = ("" + faceValue);
    }
}

public void setSuit(int suit) // suit num between 0 and 3
{
    cardSuit = suits[suit];
}

// other helpers
public int getFaceValue()
{
    return faceValue;
}
public String getCardFace()
{
    return cardFace;
}

public String toString()
{
    return (cardFace + cardSuit);
}
 }

getCardFace()返回一個String。 <>運算符僅存在於數字類型中。

你可以使用c1.getCardFace().compareTo(c.getCardFace()) < 0c1.getCardFace().compareTo(c.getCardFace()) > 0來比較字符串的自然順序。

if ( c1.getCardFace() > c.getCardFace() ||
                (c1.getCardFace().equals(c.getCardFace()) &&     c1.getFaceValue() < c.getFaceValue()) ) {

會成為

if ( c1.getCardFace().compareTo(c.getCardFace()) > 0 ||
                (c1.getCardFace().equals(c.getCardFace()) &&     c1.getFaceValue() < c.getFaceValue()) ) {

if ( c1.getFaceValue() < c.getFaceValue() ||
                (c1.getFaceValue() == c.getFaceValue() && c1.getCardFace() > c.getCardFace()) ) {

會成為

if ( c1.getFaceValue() < c.getFaceValue() ||
                (c1.getFaceValue() == c.getFaceValue() && c1.getCardFace().compareTo(c.getCardFace()) > 0) ) {

getCardFace()返回String值,但不能使用< , > , <= or >=來比較String。

不要使用這些運算符<>==來比較兩個字符串,而是使用compareTo方法。

來自Javadoc

public int compareTo(String anotherString)

字典順序比較兩個字符串。 比較基於字符串中每個字符的Unicode值。 此String對象表示的字符序列按字典順序與參數字符串表示的字符序列進行比較。 如果此String對象按字典順序位於參數字符串之前,則結果為負整數。 如果此String對象按字典順序跟隨參數字符串,則結果為正整數。 如果字符串相等,結果為零; compareToequals(Object)方法返回true時完全返回0

比較兩個字符串的示例

String s1="example1", s2="example2";
if ( s1.compareTo(s2) > 0 )
     System.out.println("First string is greater than second.");
else if ( s1.compareTo(s2) < 0 )
      System.out.println("First string is smaller than second.");
else   
      System.out.println("Both strings are equal.");

注意: compareTo方法區分大小寫,例如,如果使用compareTo方法,“java”和“Java”是兩個不同的字符串。 字符串“java”大於“Java”,因為“j”的ASCII值大於“J”。 如果您希望比較字符串但忽略大小寫,則使用compareToIgnoreCase方法。

public int compareToIgnoreCase(String str)

字典順序比較兩個字符串,忽略大小寫差異。 此方法返回一個整數,其符號是調用compareTo的符號,其中字符串的規范化版本通過在每個字符上調用Character.toLowerCase(Character.toUpperCase(character))來消除大小寫差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM