Pour quoi le programme s'affiche sof les zeros !!!?

Fermé
amani - Modifié le 22 nov. 2019 à 14:37
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 22 nov. 2019 à 10:50
Bonjour, je fais se programme une classe operation a deux integer x protected et y private et une methode d'affichage ; aussi a deux classes filles addition qui faire l'addition entre x et y et remet la résultat dans l'attribut res puis l'afficher dans le main (avec l'utilisation d'un tableau de type operation) la même chose pour la classe multiplication qui faire la multiplication ; mais je sais pas pour quoi il s'affiche juste des zeros ??????? et merci .
public class Operation {

    protected int x;

    private int y;// y est privé alors n'est pas visible dans les classes filles alors on utilise les get et les set ;

    void afficher() {
        System.out.println("la valeur est " + x + "et" + getV());
    }

    public int getV() {
        return y;
    }

    public void setV(int j) {
        this.y = j;
    }

    public static void main(String[] args) {
        Addition a1 = new Addition(1, 2);
        Addition a2 = new Addition(2, 2);
        Multiplication m1 = new Multiplication(2, 3);
        Multiplication m2 = new Multiplication(4, 2);
        Operation[] tab;
        tab = new Operation[4];
        tab[0] = a1;
        tab[3] = a2;
        tab[2] = m1;
        tab[1] = m2;
        for (int i = 0; i <= 3; i++) {
            tab[i].afficher();
        } // jcp pour quoi elle affiche just 0000?????!!!
    }
}

public class Multiplication extends Operation {

    public Multiplication(int i, int j) {
        this.x = i;
        this.getV().y = j;
    }

    int res = x * this.getV();

    void afficher() {
        System.out.println("la resultat de multiplication est " + res);
    }
}

public class Addition extends Operation {

    public Addition(int i, int j) {
        this.x = i;
        this.setV(j);
    }

    int res = x + getV();

    void afficher() {
        System.out.println("les resultat d'addition est " + res);
    }
}
Configuration: Windows / Edge 17.17134

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 22 nov. 2019 à 10:50
Bonjour,

Le problème vient de ta façon de définir res.
Tu lui mets sa valeur directement dans sa définition : int res=x + getV();
Or cette ligne est appelée au tout début de la construction de l'instance de ton objet, avant que x ou y n'aient une valeur : ils valent donc 0...

Soit tu effectues le calcul directement dans le constructeur, après les assignations de x et i ;
Soit tu crées une méthode dédiée qui effectue le calcul, et qu'il faut appeler juste avant l'affichage.

Xavier
0