为什么会出现此错误? "bad operand types for binary operator '>'"
Why am I getting this error? "bad operand types for binary operator '>'"
我想知道是什么导致下面的 "bad operand types for binary operator '>'" 错误 我有 Hand 和 Card[= 的代码30=] class 等。我还指定了导致错误的行。
谢谢您的帮助。这是一个 BlackJack 项目。
手Class
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;
}
}
错误在手class行
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()) ) {
这是卡片Class
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()
returns 一个字符串。 <
和 >
运算符仅适用于数字类型。
您可以改用 c1.getCardFace().compareTo(c.getCardFace()) < 0
或 c1.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()
正在返回字符串值,但您不能使用 < , > , <= or >=
来比较字符串。
不要使用这些运算符 <
、>
和 ==
来比较两个字符串,而是使用 compareTo
方法。
来自 Javadoc:
public int compareTo(String anotherString)
Compares two strings lexicographically. The comparison is based on the
Unicode
value of each character in the strings. The character sequence
represented by this String object is compared lexicographically to the
character sequence represented by the argument string. The result is a
negative integer if this String object lexicographically precedes the
argument string. The result is a positive integer if this String
object lexicographically follows the argument string. The result is
zero if the strings are equal; compareTo
returns 0
exactly when the
equals(Object)
method would return 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
方法区分大小写,即如果您使用 [=14=,"java" 和 "Java" 是两个不同的字符串] 方法。字符串 "java" 大于 "Java",因为 'j' 的 ASCII 值大于 'J'。如果您想比较字符串但忽略大小写,请使用 compareToIgnoreCase
方法。
public int compareToIgnoreCase(String str)
Compares two strings lexicographically, ignoring case differences.
This method returns an integer whose sign is that of calling compareTo
with normalized versions of the strings where case differences have
been eliminated by calling
Character.toLowerCase(Character.toUpperCase(character))
on each
character.
我想知道是什么导致下面的 "bad operand types for binary operator '>'" 错误 我有 Hand 和 Card[= 的代码30=] class 等。我还指定了导致错误的行。 谢谢您的帮助。这是一个 BlackJack 项目。
手Class
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;
}
}
错误在手class行
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()) ) {
这是卡片Class
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()
returns 一个字符串。 <
和 >
运算符仅适用于数字类型。
您可以改用 c1.getCardFace().compareTo(c.getCardFace()) < 0
或 c1.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()
正在返回字符串值,但您不能使用 < , > , <= or >=
来比较字符串。
不要使用这些运算符 <
、>
和 ==
来比较两个字符串,而是使用 compareTo
方法。
来自 Javadoc:
public int compareTo(String anotherString)
Compares two strings lexicographically. The comparison is based on the
Unicode
value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argument string. The result is a negative integer if this String object lexicographically precedes the argument string. The result is a positive integer if this String object lexicographically follows the argument string. The result is zero if the strings are equal;compareTo
returns0
exactly when theequals(Object)
method would returntrue
.
比较两个字符串的例子
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
方法区分大小写,即如果您使用 [=14=,"java" 和 "Java" 是两个不同的字符串] 方法。字符串 "java" 大于 "Java",因为 'j' 的 ASCII 值大于 'J'。如果您想比较字符串但忽略大小写,请使用 compareToIgnoreCase
方法。
public int compareToIgnoreCase(String str)
Compares two strings lexicographically, ignoring case differences. This method returns an integer whose sign is that of calling
compareTo
with normalized versions of the strings where case differences have been eliminated by callingCharacter.toLowerCase(Character.toUpperCase(character))
on each character.