【问题标题】:Why am I getting this error? "bad operand types for binary operator '>'"为什么我会收到此错误? “二元运算符'>'的错误操作数类型”
【发布时间】:2015-08-03 03:41:57
【问题描述】:

我想知道是什么导致了下面的“二元运算符'>'的操作数类型错误”的错误我有我的 HandCard 的代码> 课程。我还指定了导致错误的行。 谢谢您的帮助。这是一个二十一点项目。

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

 }

错误在 hand 类中的行

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

【问题讨论】:

    标签: java blackjack


    【解决方案1】:

    getCardFace() 返回一个字符串。 &lt;&gt; 运算符仅适用于数字类型。

    您可以改用c1.getCardFace().compareTo(c.getCardFace()) &lt; 0c1.getCardFace().compareTo(c.getCardFace()) &gt; 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) ) {
    

    【讨论】:

      【解决方案2】:

      getCardFace() 正在返回字符串值,但您不能使用&lt; , &gt; , &lt;= or &gt;= 来比较字符串。

      【讨论】:

        【解决方案3】:

        不要使用&lt;&gt;== 这些运算符来比较两个字符串,而是使用compareTo 方法。

        来自Javadoc

        public int compareTo(String anotherString)

        比较两个字符串按字典顺序。比较是基于 Unicode 字符串中每个字符的值。字符序列 由此 String 对象表示的按字典顺序与 由参数字符串表示的字符序列。结果是一个 如果此 String 对象按字典顺序位于 参数字符串。如果此字符串,则结果为正整数 对象按字典顺序跟随参数字符串。结果是 如果字符串相等,则为零; compareTo 返回 0 equals(Object) 方法将返回 true

        比较两个字符串的例子

        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)) 在每个 字符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-02
          • 1970-01-01
          • 1970-01-01
          • 2016-06-24
          相关资源
          最近更新 更多