I'm coding a program to sell and buy games. I have 3 classes: Main, Person and Game. What I want it to do: Check if the (Game g) is already in the (ArrayList games), basically check for the same values. If yes, then it should return true. If false, it should return false. How can I achieve this?
My problem: For the p1.koop(g3) it still says it succeeded. However, the g2 and g3 are the same. Therefor it should not succeed.
My main:
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"); } }
This is my Person 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;
}
}
Here's my equals method in the Game 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;
}
}