Java Equals方法

Java Equals方法,java,equals,Java,Equals,我正在编写一个出售和购买游戏的程序。我有三门课:主课、个人课和游戏课。我希望它做的是:检查(游戏g)是否已经在(ArrayList游戏)中,基本上检查相同的值。如果是,则应返回true。如果为false,则应返回false。我怎样才能做到这一点 我的问题是:对于p1.koop(g3),它仍然说它成功了。然而,g2和g3是相同的。因此,它不应该成功 我的主要意见是: package week3.practicum; import java.time.LocalDate; public cla

我正在编写一个出售和购买游戏的程序。我有三门课:主课、个人课和游戏课。我希望它做的是:检查(游戏g)是否已经在(ArrayList游戏)中,基本上检查相同的值。如果是,则应返回true。如果为false,则应返回false。我怎样才能做到这一点

我的问题是:对于p1.koop(g3),它仍然说它成功了。然而,g2和g3是相同的。因此,它不应该成功

我的主要意见是:

package week3.practicum;

import java.time.LocalDate;  
public class Practicum2 {   
    public static void main(String[] args) {     
    int releaseJaar1 = LocalDate.now().getYear() - 1; // 1 jaar geleden     
    int releaseJaar2 = LocalDate.now().getYear() - 2; // 2 jaar geleden  

    Game g1 = new Game("Just Cause 3", releaseJaar1, 49.98);     
    Game g2 = new Game("Need for Speed: Rivals", releaseJaar2, 45.99);     
    Game g3 = new Game("Need for Speed: Rivals", releaseJaar2, 45.99);  
    Persoon p1 = new Persoon("Eric", 200.0);     
    Persoon p2 = new Persoon("Hans", 55.0);     
    Persoon p3 = new Persoon("Arno", 185.0);  
    System.out.println("p1 koopt g1:" + (p1.koop(g1) ? "" : " niet") + " gelukt");  
    System.out.println("p1 koopt g2:" + (p1.koop(g2) ? "" : " niet") + " gelukt");     
    System.out.println("p1 koopt g3:" + (p1.koop(g3) ? "" : " niet") + " gelukt");     
    System.out.println("p2 koopt g2:" + (p2.koop(g2) ? "" : " niet") + " gelukt");     
    System.out.println("p2 koopt g1:" + (p2.koop(g1) ? "" : " niet") + " gelukt");     
    System.out.println("p3 koopt g3:" + (p3.koop(g3) ? "" : " niet") + " gelukt");     
    System.out.println("\np1: " +p1+ "\n\np2: " +p2+ "\n\np3: " +p3+ "\n");  

    System.out.println("p1 verkoopt g1 aan p3:"+(p1.verkoop(g1, p3) ? "" : " niet")+" gelukt");     
    System.out.println("p2 verkoopt g2 aan p3:"+(p2.verkoop(g2, p3) ? "" : " niet")+" gelukt");     
    System.out.println("p2 verkoopt g1 aan p1:"+(p2.verkoop(g1, p1) ? "" : " niet")+" gelukt");     
    System.out.println("\np1: " +p1+ "\n\np2: " +p2+ "\n\np3: " +p3+ "\n");   } } 
这是我的个人课:

package week3.practicum;
import java.util.ArrayList;

public class Persoon {
    private String naam;
    private Double budget;
    private ArrayList<Game> games;
    private Game gameObj;

    public Persoon(String nm, Double bud){
        naam = nm;
        budget = bud;
        games = new ArrayList<Game>();
    }

    public boolean koop(Game g){
        Double huidW = g.huidigeWaarde();
        if (budget > huidW && games.equals(g) == false){
            games.add(g);
            budget = budget - huidW;
            return true;
        }
        else{return false;}
    }

    public boolean verkoop(Game g, Persoon koper){
        Double huidW = g.huidigeWaarde();

        if (koper.budget > huidW){
            koper.budget = koper.budget = huidW;
            budget = budget + huidW;
            koper.games.add(g);
            games.remove(g);
            return true;
        }
        else{
            return false;
        }
    }

    public String toString(){
        String s = naam + " heeft een budget van " +  budget + " en bezit de volgende games:\n";
        for (Game gam: games){
            s += gam;
        }
        return s;
    }
}

您没有以任何方式调用equals方法。
满足您最初的需求:
1-创建一个私有方法,该方法将使用2个参数:1-游戏ArrayList,2-要检查的游戏。 稍后进行循环并检查游戏是否存在返回false

private boolean doesGameExist(ArrayList gameList, Game gameToAdd){
    for (int i=0; i<gameList.size(); i++){
          if (gameList.get(i).equals(gameToAdd)){
               return true; //the game already exists
          }
    }
   return false; ///the game does not exist
 }
private boolean doesGameExist(ArrayList游戏列表,Game gameToAdd){
对于(int i=0;i
游戏。等于(g)=false

除了不需要将
布尔值
布尔值
进行比较就可以将
布尔值
转换为
布尔值
之外,您还需要将
列表
游戏
进行比较,这永远不会是
真的

别忘了实现
哈希代码
。您的游戏类是什么?什么您的代码有什么问题吗?现在您有一个equals方法,如果参数
andereObject
是相同的类型,并且具有相同的“naam”值,该方法将返回true属性。看起来没问题-您遇到的具体问题是什么?添加了完整的类。因此,您还需要比较其他两个属性,并且只有当它们都匹配时才返回true。正确地说,最简单的方法是:告诉您的IDE为您生成方法。使用
包含
。不要变得这么复杂。@LewBloch+1 agree你能告诉我应该怎么做吗?你想想所涉及的类型。
List
Game
不可能是一样的。但是
Game
s的列表可能包含
Game
。在Java中是
List games=new ArrayList();/*填充它*/if(games.contains(Game)){/*etc./}
private boolean doesGameExist(ArrayList gameList, Game gameToAdd){
    for (int i=0; i<gameList.size(); i++){
          if (gameList.get(i).equals(gameToAdd)){
               return true; //the game already exists
          }
    }
   return false; ///the game does not exist
 }