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