当前位置: 首页 > 知识库问答 >
问题:

HashMap-HashCode&equals方法返回类型

闻人杰
2023-03-14

我正在Java开发一个纸牌游戏,我试图比较hashMap中的键和ArrayList中的元素(两者都是对象)。hashCode()和equals()被重写,但出现了一个错误,我不确定它的哪一部分是错误的。

这是纸牌课

class Cards implements Comparable<Cards> {
    public String suit;
    public String face;
    
    public Cards() {
        
    }

    //Create Cards object 
    public Cards (String suit, String face){
        this.suit = suit;
        this.face = face;
    }

    //Return card suit
    public String getSuit() {
        return suit;
    }

    //Return card face
    public String getFace() {
        return face;
    }
    
    
    @Override
    public int compareTo(Cards currentCards) {
        if (getSuit().compareTo(currentCards.getSuit()) > 0) {
            return 1; 
        } else if ((getSuit().compareTo(currentCards.getSuit())) < 0){
            return -1; 
        } else if ((getSuit().compareTo(currentCards.getSuit())) == 0){
            if (getFace().compareTo(currentCards.getFace()) > 0){
                return 1;
            } else if (getFace().compareTo(currentCards.getFace()) < 0){
                return -1;
            }
        }
        return 0;
            
    }
    
    @Override
    public boolean equals(Object o) {
        if (o == this)
            return true;
        if (!(o instanceof Cards))
            return false;
        Cards other = (Cards)o;
        boolean suitEquals = (this.suit == null && other.suit == null) ||
                        (this.suit != null && this.suit.equals(other.suit));
        boolean faceEquals = (this.face == null && other.face == null) ||
                        (this.face != null && this.face.equals(other.face));
        return suit && face;
            
    }
    
    @Override
    public int hashCode() {
        int result = 17;
        if (suit != null) {
            result = 31 * result + suit.hashCode();
        }
        if (face != null) {
            result = 31 * result + face.hashCode();
        }
        return result;
    }

}

我们要做的比较

/**Creating Cards object*/
String[] SUIT = new String[]{ "d", "c", "h", "s" };
String[] FACE = new String[]{ null, "A", "2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K" };
Cards[] cardDeck = new Cards[52];
int index = 0;
    
  for (int i = 0; i <= 3; i++) {
      for (int j = 1; j <= 13; j++) {
          cardDeck[index] = new Cards(SUIT[i], FACE[j]);
          index++;
      }
  }

/**Player 1 in hand*/
ArrayList<Cards> player1 = new ArrayList<Cards>();
int j=0;

for (int i = 0; i <18; i++){
        player1.add(i, cardDeck[j++]);
    }

for(Cards n : player1){
    if (Points.containsKey(n)){
        System.out.println("Card points: " + Points.get(n)); 
    }
}

错误:点击查看错误图片

共有1个答案

於意蕴
2023-03-14

您正在尝试使用两个字符串对象作为布尔对象:

更换返回服&&面;在您的equals方法中,返回suitEquals&&facequals。

 类似资料:
  • 在这里,对象返回相同的hashcodes,所以为了避免在向HashMap添加数据时重写,我有一个返回false的equals方法。现在,当我使用get时,我得到了正确的数据示例obj1和obj给出了准确的值,但我的问题是,当它们的hashcode相同时,java如何区分不同的对象并从hashmap返回它们的准确值。

  • 菜单栏: Code —> Generate —> equals() and hashCode() 右键菜单:Generate —> equals() and hashCode() 快捷键: Mac: command + N Windows\/Linux: Alt + Insert —> equals() and hashCode()

  • 如果你有如下需求,你必须重载 equals() 和 hashCode() 方法: 想把持久类的实例放入 Set 中(当表示多值关联时,推荐这么做),而且 想重用脱管实例 Hibernate 保证,仅在特定会话范围内,持久化标识(数据库的行)和 Java 标识是等价的。因此,一旦我们混合了从不同会话中获取的实例,如果希望 Set 有明确的语义,就必须实现 equals() 和 hashCode()。

  • 我正在尝试使用equals方法与对象进行比较,但它总是返回false

  • 本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha

  • 问题内容: 以下代码示例的输出是: {1–e = e2,2–e1 = e1} 我不明白对象如何能够覆盖对象中的键,但不能覆盖值。以我的理解,输出应该是: {1–e2 = e2,2–e1 = e1} 问题答案: 实际上,您将其倒退了。该值被覆盖。密钥没有被替换,因为就e和e2而言,它们是相同的。 您的输出是: