2017-05-13 3 views
0

Ich muss zwei Objekte vergleichen und true zurückgeben, wenn der Name gleich oder falsch ist, wenn nicht.Objekte vergleichen

public class Team { 
private String TeamName; 

public Team(String name) 
{ 
    TeamName = name; 

} 

// I was trying this way but I was not able to do it. 
public boolean equals(Object object) { 
    if (TeamName.equals(objet.toString())) { 
     return true; 
    } 
    else{ 
     return false; 
    } 

Antwort

0

Sie benötigen, um den Parameter object auf einen Typ Team zuerst, um zu werfen, ihre Namen zu vergleichen.

Beispiel:

public boolean equals(Object object) { 
    if(object instanceof Team) { 
     Team team = (Team)object; 
     return this.TeamName.equals(team.TeamName); 
    } 
    return false; 
} 
0

dies nicht funktioniert, weil object.toString() nicht den Wert des TeamName Elementvariablen des anderen Objekts zurückgibt (wenn Klasse Team nicht über eine überschriebene toString() Methode).

In Ihrer equals() Methode, sollen Sie:

  1. prüfen, ob das andere Objekt tatsächlich mit einem Team Objekt ist instanceof
  2. wenn es ist, dann ist es gegossen und das andere Objekts des TeamName Variable erhalten und vergleichen es die

wie dies das aktuelle Objekt:

public boolean equals(Object object) { 
    if (object instanceof Team) {  // check if it is a Team 
     Team otherTeam = (Team) object; // cast to Team 
     return TeamName.equals(other.TeamName); // compare and return result 
    } else { 
     return false; // the other object is not a Team 
    } 
} 
+0

Danke, es hat funktioniert !! –

2

Sie sollten TeamName durch name Feld in Team Klasse ersetzen.
Die Wiederholung Team ist redundant und Variablennamen sollten mit einem Kleinbuchstaben beginnen.

Für die Gleichheit, zuerst müssen Sie die Typkompatibilität überprüfen und Sie können dann die equals() Methode verwenden, indem Sie die name String Felder vergleichen.
Stattdessen direkt String#equals(Object o) Methode verwenden, können Sie Objects.equals(Object a, Object b) verwenden, die die Nullprüfung für das Feld name schont.

Endlich , wenn Sie außer Kraft setzen equals(), hashcode() sollte auch sein folglich um außer Kraft gesetzt, diese beiden Methoden konsistent zu halten.

@Override 
public boolean equals(Object object) { 
    if (!(object instanceof Team)){ 
     return false; 
    } 

    Team otherTeam = (Team) object;   
    return Objects.equals(name, otherTeam.name); 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((name == null) ? 0 : name.hashCode()); 
    return result; 
} 
+0

Vielen Dank! Jetzt verstehe ich es, ich war irgendwie verloren. Keep coding –

+0

Sie erhalten meine upvote, wenn Sie den Namen Vergleich Null-Safe durch 'Objects.equals()' und zeigen, wie OP sollte mit 'hashCode()' :) Beachten Sie auch, mit '@Override annotieren ' –

+1

@Mick Mnemonic Eine Herausforderung für eine Upvote M. der Lehrer :) Wenn wir beginnen, eine umfassende Antwort zu schreiben, könnte auch bis zum Ende gehen. Also, ich habe es getan. – davidxxx

Verwandte Themen