私はゲームを売買するプログラムをコーディングしています。私は3つのクラスを持っています:メイン、人とゲーム。私は何をしたいのですか:(ゲームg)が(ArrayListゲームに)既に入っているかどうかを確認し、基本的に同じ値をチェックします。はいの場合、trueを返します。 falseの場合、falseを返す必要があります。どうすればこれを達成できますか?Java Equalsメソッド
私の問題: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"); } }
これは私のPersonクラスです:
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メソッドです。
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;
}
}
'hashCode'も忘れずに実装してください。 –
ゲームクラスは何ですか?あなたのコードの問題は何ですか? –
今では、パラメータ 'andereObject'が同じ型で、 "naam"プロパティと同じ値を持つ場合にtrueを返すequalsメソッドがあります。それはいいように見える - あなたは持っている特定の問題は何ですか? – mmcrae