2017-03-18 14 views
-3

私はゲームを売買するプログラムをコーディングしています。私は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; 
    } 

} 
+0

'hashCode'も忘れずに実装してください。 –

+1

ゲームクラスは何ですか?あなたのコードの問題は何ですか? –

+1

今では、パラメータ 'andereObject'が同じ型で、 "naam"プロパティと同じ値を持つ場合にtrueを返すequalsメソッドがあります。それはいいように見える - あなたは持っている特定の問題は何ですか? – mmcrae

答えて

1

games.equals(g) == false 別にあなたがbooleanbooleanを変換するbooleanbooleanを比較する必要がないという事実から、あなたはtrueになることはありませんGameListを、比較しています。

+1

どうすればいいのか分かりませんか? –

+1

あなたは関係するタイプを考えます。 'List'と' Game'は同じではありません。しかし、ゲームのリストにはゲームが含まれているかもしれません。 Javaでは 'List games = new ArrayList <>();となります。//それを埋める*/if(games.contains(game)){/ * etc. * /} ' –

+0

ありがとう、それはトリックでした。 –

-1

あなたはどのような方法でもequalsメソッドを呼び出すことはありません。
あなたの最初の必要性に対処する:
1-ゲームArrayListと2チェックするゲームの2つのパラメータを取るプライベートメソッドを作成します。 ループがあり、ゲームが存在するかどうかを確認します。

新しいゲームを配列リストに追加する前にこの関数を呼び出すよりも、

+0

'contains'を使用してください。複雑にならないでください。 –

+0

@LewBloch +1 agree –

関連する問題