Ap Informatique Java Interfaces et Comparer méthode dilemme


Je suis censé écrire une classe Cruiser qui implémente l'interface localisable. Cruiser aura des propriétés x, y et speed. x, y et speed sont des nombres entiers. Vous devez fournir 3 constructeurs pour class Cruiser. Class Cruiser doit implémenter l'interface localisable.

Un constructeur doit être une valeur par défaut. Un constructeur doit être un constructeur x et y uniquement. Un constructeur doit être un constructeur x, y et speed. Vous devez fournir une méthode equals. La méthode equals () devrait comparez les propriétés de deux objets Cruiser. Vous devez fournir une méthode toString (). Le toString () devrait renvoyer les x, y et la vitesse du croiseur.

Lorsque je compile ceci, il est dit "class Cruiser est public, devrait être déclaré dans Cruiser.java "

Quand je fais cela, monE dit ";" comme prévu après que le booléen public soit égal. mais cela ne fait pas sens pourquoi vous auriez besoin d'un point-virgule dans une méthode.

C'est Ce que j'ai jusqu'à présent

 public interface Locatable
 {
 public int getxPos();
 public int getyPos();
 }

 public class Cruiser implements Locatable
 {
 private int xPos, yPos, speed;
 public Cruiser()
 {
 xPos=yPos=speed=0;
 }

 public Cruiser(int x,int y)
 {
 xPos=x;
 yPos=y;
 speed=0;
 }

 public Cruiser(int x, int y, int spd)
 {
 xPos=x;
 yPos=y;
 speed=spd;
 }

 public int getxPos()
 {
 return xPos;
 }

 public int getyPos()
 {
 return yPos;
 }

 public int getSpeed()
 {
 return speed;
 }

 public void compare(Cruiser A, Cruiser B)
 {
 @Override
 public boolean equals(Object obj) 
 {
 if (obj instanceof Cruiser) {
    Cruiser cruiserToCompareTo = (Cruiser)obj;

    if(xPos == cruiserToCompareTo.getXpos() &&
            yPos == cruiserToCompareTo.getYpos() &&
            speed == cruiserToCompareTo.getSpeed())
        return true;            
}
return false;
}
public String toString()
{
String properties = "X position:"+ xPos+ ", Y position:"+yPos+ ",Speed:"+speed;
return properties;
}
} 
}
Author: user3527500, 2014-04-13

2 answers

Voici ce que cela signifie que equals doit comparer les champs/propriétés.

public boolean equals(Object obj) {
    if (obj instanceof Point) {
        Point pt = (Point)obj;
        return (x == pt.x) && (y == pt.y);
    }
    return super.equals(obj);
}

Cet exemple est tiré de java.awt.Point
qui est l'une des classes intégrées de Java.
Donc Point a 2 propriétés x et y, et
dans sa méthode equals, il les compare.

Voir aussi:

Java.awt.Point.est égal à

 1
Author: peter.petrov, 2014-04-12 21:16:59

Vous avez un Croiseur Une avec des propriétés x,y,vitesse et vous avez Cruiser B avec x,y,vitesse. Equals renvoie true, si A. x == B. x, A. y = = B. y, A. speed == B. speed tous sont vrais. Le croiseur A et le croiseur B sont donc égaux, lorsque tous les paramètres sont égaux.

Edit: Le code suivant doit être entré dans Cruiser-Class

public int getSpeed() {
    return speed;
}

@Override
public boolean equals(Object obj) {
    if (obj instanceof Cruiser) {
        Cruiser cruiserToCompareTo = (Cruiser)obj;

        if(xPos == cruiserToCompareTo.getXpos() &&
                yPos == cruiserToCompareTo.getYpos() &&
                speed == cruiserToCompareTo.getSpeed())
            return true;            
    }
    return false;
}

Et s'il vous plait: Formatez mieux votre code et nommez les méthodes en classe Cruiser de la même manière que dans l'interface.

Edit 2: Concernant votre deuxième problème: Vous devez séparer les fichiers, Cruiser.java et localisable.Java. Le code fonctionne bien ici

 1
Author: Killgnom, 2014-04-12 23:06:14