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

Signaler
-
Reivax962
Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
-
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

2 réponses

Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
920
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