Java 等于方法
Java Equals Method
我正在编写一个程序来销售和购买游戏。我有 3 个 classes:Main、Person 和 Game。我想要它做什么:检查 (Game g) 是否已经在 (ArrayList games) 中,基本上检查相同的值。如果是,那么它应该 return 为真。如果为假,则应 return 为假。我怎样才能做到这一点?
我的问题:对于 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"); } }
这是我的人class:
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 方法 class。
package week3.practicum;
public class Game {
private String naam;
private Integer releaseJaar;
private Double nieuwprijs;
public Game(String nm, Integer rJ, Double nwpr){
naam = nm;
releaseJaar = rJ;
nieuwprijs = nwpr;
}
public String getNaam(){
return naam;
}
public Double huidigeWaarde(){
Double huidigeprijs = 0.0;
if (releaseJaar == 2016){
huidigeprijs = nieuwprijs * 0.7;
}
else if (releaseJaar == 2015){
huidigeprijs = nieuwprijs * 0.7 * 0.7;
}
else{
huidigeprijs = nieuwprijs;
}
return huidigeprijs;
}
public boolean equals(Object andereObject) {
boolean gelijkeObjecten = false; // blijft false tenzij:
if (andereObject instanceof Game) {
Game andereGame = (Game) andereObject;
if (this.naam.equals(andereGame.naam)){
gelijkeObjecten = true;
}
}
return gelijkeObjecten; }
public String toString(){
String s = naam + ", uitgegeven in " + releaseJaar + "; nieuwprijs: " + nieuwprijs + " nu voor: " + huidigeWaarde() + "\n";
return s;
}
}
您没有以任何方式调用 equals 方法。
满足您的初始需求:
1- 创建一个采用 2 个参数的私有方法:1- 游戏 ArrayList 和 2 您要检查的游戏。
稍后 for 循环并检查游戏是否存在 return 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
}
而不是在将新游戏添加到数组列表之前调用此函数。
games.equals(g) == false
除了不需要将 boolean
与 boolean
进行比较以将 boolean
转换为 boolean
这一事实之外,您正在比较 List
到 Game
,永远不可能是 true
.
我正在编写一个程序来销售和购买游戏。我有 3 个 classes:Main、Person 和 Game。我想要它做什么:检查 (Game g) 是否已经在 (ArrayList games) 中,基本上检查相同的值。如果是,那么它应该 return 为真。如果为假,则应 return 为假。我怎样才能做到这一点?
我的问题:对于 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"); } }
这是我的人class:
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 方法 class。
package week3.practicum;
public class Game {
private String naam;
private Integer releaseJaar;
private Double nieuwprijs;
public Game(String nm, Integer rJ, Double nwpr){
naam = nm;
releaseJaar = rJ;
nieuwprijs = nwpr;
}
public String getNaam(){
return naam;
}
public Double huidigeWaarde(){
Double huidigeprijs = 0.0;
if (releaseJaar == 2016){
huidigeprijs = nieuwprijs * 0.7;
}
else if (releaseJaar == 2015){
huidigeprijs = nieuwprijs * 0.7 * 0.7;
}
else{
huidigeprijs = nieuwprijs;
}
return huidigeprijs;
}
public boolean equals(Object andereObject) {
boolean gelijkeObjecten = false; // blijft false tenzij:
if (andereObject instanceof Game) {
Game andereGame = (Game) andereObject;
if (this.naam.equals(andereGame.naam)){
gelijkeObjecten = true;
}
}
return gelijkeObjecten; }
public String toString(){
String s = naam + ", uitgegeven in " + releaseJaar + "; nieuwprijs: " + nieuwprijs + " nu voor: " + huidigeWaarde() + "\n";
return s;
}
}
您没有以任何方式调用 equals 方法。
满足您的初始需求:
1- 创建一个采用 2 个参数的私有方法:1- 游戏 ArrayList 和 2 您要检查的游戏。
稍后 for 循环并检查游戏是否存在 return 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
}
而不是在将新游戏添加到数组列表之前调用此函数。
games.equals(g) == false
除了不需要将 boolean
与 boolean
进行比较以将 boolean
转换为 boolean
这一事实之外,您正在比较 List
到 Game
,永远不可能是 true
.