0
votes

Java équivaut à la méthode. Comment retourner plusieurs booléens comparant chaque attribut inside objet

import java.util.*;

public class Digimon1{

private String name;
private int hitPoints;
private double attackSpeed;

public Digimon1(String name, int hitPoints, double attackSpeed){
  this.name = name;
  this.hitPoints = hitPoints;
  this.attackSpeed = attackSpeed;

}
public String getName(){
   return this.name;
}
public double getAttackSpeed(){
   return this.attackSpeed;
}



public boolean equals(Object a){
   Digimon1 o = (Digimon1) a;
   if (this.name == o.getName() && this.attackSpeed == o.getAttackSpeed()){
      return true;
}else{
   return false;
     }
}
public static void main(String[] args){
   List <Digimon1> digimon = new ArrayList<>();
   Digimon1 gatamon = new Digimon1("Gatamon", 500, 12.9);
   digimon.add(gatamon);

   Digimon1 agumon = new Digimon1("agumon", 53, 9.8);//agumon
   digimon.add(gatamon);

  Digimon1 agumon1 = new Digimon1("agumon", 53, 9.8);//agumon1
  digimon.add(gatamon);

  System.out.print(agumon.equals(agumon1));



}


 }
So my codes equals method should output a "true, false, true" when 2 digimons have the same name and attackspeeed. But what i understand is that my equals can return if my object is true or or false.
how do i return three boolean statments?

7 commentaires

Tu ne le fais pas. La méthode Equals, ou toute version de remplacement de la nervation, ne peut renvoyer qu'une seule version booléenne. Cela ne signifie pas que vous ne pouvez pas créer vos propres égaux qui renvoie une gamme de booléens. Je recommanderais de lui donner un autre nom, cependant, si seulement pour éviter toute confusion


Utilisez une fonction qui n'est pas égale


Votre compréhension est correcte. est égal à devrait retourner un boolean valeur. Pourquoi devriez-vous produire vrai, false, vrai ?


Je le ferais de cette façon. Créez 3 méthodes telles que EqualsName (), EqualSpeed ​​(), EqualsSpeed ​​(), EqualsSpeed ​​() Et vous pouvez les appeler dans votre méthode Equals comme EqualSName () &&) && Equalshits () , si vous voulez que vous puissiez les appeler individuellement.


Et vous devez vérifier le type d'objet dans des égaux avant d'accéder aux champs, si (une instanceof digimon1)


Quelle utilisation est une valeur de retour de [vrai, false, true] ? Il est indéterminé de savoir quel champ a la valeur fausse , et même s'il a été documenté, il est rigide et fragile, faisant des modifications futures presque impossibles à rester compatibles en arrière.


ATTENTION: this.name == o.getName () échouera éventuellement échouer. Voir Stackoverflow.com/questions/ 513832 / ... .


3 Réponses :


1
votes

Si je vous comprends de manière correcte et que vous voulez vraiment voir 3 Boolean en conséquence. C'est le moyen le plus simple de réaliser cela.

Vous pouvez créer une matrice BOOL, P>

 boolean array[];
 array = new boolean[3];
  // then you can set the result to the array like this,

     if(this.name == o.getName())
            array[0] = true; 
    if(this.attackSpeed == o.getAttackSpeed())
            array[1] = true; 
//...

    return array;



-1
votes

Vous pouvez implémenter objet # égale (objet obj) , mais vous ne pouvez pas modifier le nombre d'arguments ou de signature informatique. Implémentez votre propre méthode, qui vérifie plusieurs objets, cela peut être une bonne manière.


6 commentaires

"Vous ne pouvez pas changer le nombre d'arguments ni de la signature" - sûr de votre pouvoir, c'est ce qu'on appelle la surcharge de la méthode.


@Andreas, je parle de objet # égale .


Mais la question est juste de demander que un est égal à la méthode , pas nécessairement que le # objet est égal à la méthode . Le code de question n'a même pas ajouté @override . Donc, dire que vous ne pouvez pas changer la signature est trompeuse, car vous peut .


@Andreas, jetez un coup d'œil sur le titre de question: Java Equals Méthode.


Oui, la question concerne Java, pas C, C #, Python, JavaScript ou tout autre langage de programmation. À quoi veux-tu en venir?


Ou sur la fonction, qui est couramment développée par Java ?



0
votes

Les autres réponses ont déjà signalé que vous ne pouvez pas et ne devrait pas non plus penser à utiliser objet.equals pour cela. Une solution consiste à utiliser une méthode personnalisée renvoyant une matrice booléenne, mais vous pouvez également regarder enumsets: xxx

une méthode personnalisée ne peut également accepter que digimon s.t. Vous n'avez pas besoin de vérifier / lancer le type, comme vous le feriez dans la méthode des égaux.

EDIT: parce que OP est en difficulté avec la mise en œuvre égale et peut-être que les gens nouveaux à Java lisent ceci, je veux ajouter que vous devriez aussi remplacer hashcode lorsque vous remplacez égale


0 commentaires