Additionner 2 résultats de 2 objets différents. [Résolu/Fermé]

Signaler
-
 JUju45 -
Bonjour,
tout est dans la titre, je cherche comment additionner 2 résultats de 2 objets différents.
Il y a une commande spéciale ?


9 réponses

Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
Ça dépend ce que sont ces objets et surtout les "résultats" que tu veux additionner.

Si ce sont des types primitifs ou des Wrapper tu as l'opérateur +
Sinon ce sont des classes donc il faut regarder les méthodes dont elles disposent.

Encore une fois, un morceau de code dans ton explication, éviterait d'avoir à tourner autour du pot, à essayer de deviner le problème, alors qu'il te suffit de faire un copier coller pour qu'on te donne tout de suite la réponse la plus appropriée.
oui désolé, c'est vrai que c'est une question ambiguë.
Mon programme :
public class AppTp1 {

static public void main(String[] arg) {
LigneCmd ligneA;
LigneCmd ligneB;

ligneA = new LigneCmd();
ligneA.setRefArticle("1234");
ligneA.setNomArticle("Parapluie aluminium");
ligneA.setQuantite(8);
ligneA.setPrixU(6.25);




ligneB = new LigneCmd();
ligneB.setRefArticle("1222");
ligneB.setNomArticle("Briquet gaz");
ligneB.setQuantite(21);
ligneB.setPrixU(1.25);

System.out.println(ligneA);
System.out.println(ligneB);
}
}
-----------------------------------------------------------------------------------
public class LigneCmd {

private String refArticle;
private String nomArticle;
private double prixU;
private int quantite;

public double montant() {
return this.prixU * this.quantite;
}

public String toString() {
String res = "Reference du produit : " + this.refArticle;
res = res + "\nNom de l'article : " + this.nomArticle;
res = res + "\nQuantite : " + this.quantite;
res = res + "\nPrixU : " + this.prixU;
res = res + "\nMontant : "+ this.prixU*this.quantite;


return res;
}


public String getRefArticle() {
return this.refArticle;
}

public void setRefArticle(String uneRefArticle) {
this.refArticle = uneRefArticle;
}
public String getNomArticle() {
return this.nomArticle;
}

public void setNomArticle(String uneNomArticle) {
this.nomArticle = uneNomArticle;
}

public int getQuantite() {
return this.quantite;
}

public void setQuantite(int uneQuantite) {
this.quantite = uneQuantite;
}

public double getPrixU() {
return this.prixU;
}

public void setPrixU(double unPrixU) {
this.prixU = unPrixU;
}





}
--------------------------------------------------------------------------------

Je souhaite donc afficher sur la console l'addition des 2 montants des 2 objets ligneA et ligneB, et au passage, vous avez une technique pour afficher (toujours sur la console) le résultat de la méthode :
public double montant() {
return this.prixU * this.quantite;
},
sans passer par cette ligne :
res = res + "\nMontant : "+ this.prixU*this.quantite; ?
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
la méthode montant renvoie un type primitif (double), donc tu peux utiliser l'opérateur +
double somme = ligneA.montant() + ligneB.montant();
Pour la méthode toString, il est déconseillé de l'étaler sur plusieurs lignes avec des \n, il vaut mieux privilégier un affichage concis, où tous les champs sont regroupés dans un parenthèsage.
Quant à l'affichage de ton montant, tu devrais tout simplement appeler la méthode montant().

public String toString()
{ 
    return String.format("[ref=%s; nom=%s; nbr=%d; pxU=%.2f; pxT=%.2f]", refArticle, nomArticle, quantite, prixU, montant());
}
Merci pour ce bon conseil, mais je la met où exactement cette ligne :
double somme = ligneA.montant() + ligneB.montant();
comment je fais la syntaxe et dans quelle entité la mettre (première ou deuxième ?)
(désolé pour ce gros manque d'expérience, j'ai n'ai fait qu'un seul cours sur ce langage)
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
Tu l'as mets où tu veux, là tu en as besoin... J'imagine que ce sera à la fin de ton main.

Remarque : plutôt que de faire un constructeur par défaut et tout une succession de "set", je te conseil de faire un constructeur avec tous les champs, c'est plus simple...

public static void main(String[] args)
{
    LigneCmd ligneA = new LigneCmd("1234", "Parapluie aluminium",8, 6.25);
    System.out.println(ligneA);
    
    LigneCmd ligneB = new LigneCmd("1222","Briquet gaz",21,1.25);
    System.out.println(ligneB);

    double somme = ligneA.montant() + ligneB.montant();
    System.out.println(somme);
} 
j'ai changé l'entité comme ceci :
public class AppTp1 {

static public void main(String[] arg) {
LigneCmd ligneA;
LigneCmd ligneB;

ligneA = new LigneCmd();
ligneA.setRefArticle("1234");
ligneA.setNomArticle("Parapluie aluminium");
ligneA.setQuantite(8);
ligneA.setPrixU(6.25);




ligneB = new LigneCmd();
ligneB.setRefArticle("1222");
ligneB.setNomArticle("Briquet gaz");
ligneB.setQuantite(21);
ligneB.setPrixU(1.25);

System.out.println(ligneA);
System.out.println(ligneB);

double somme = ligneA.montant() + ligneB.montant();

System.out.println(somme);

}
}
Mais le console m'affiche cette erreur :
http://img5.imageshack.us/img5/7444/capture7b.png
Il faudrait changer quelque chose dans la deuxième entité non ?
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
Non, il n'y a rien à changer dans le code, le problème est dans l'invite de commande :

javac AppTP1.java
Je n'ai rien dit !
C'est une erreur bête de ma part.
La console affiche avec succès ceci :
http://img855.imageshack.us/img855/4314/capture8s.png
Mais une dernière petite question, comment puis-je mettre du texte devant cette somme ?
(j'ai essayé ceci : System.out.print("Total : %.2f ", somme); mais sans résultat concluent)
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
Et bien il y a plusieurs manières, les plus courantes étant :

System.out.print("somme = ");
System.out.println(somme);

System.out.println("somme = "+somme);

System.out.printf("somme = %.2f\n",somme);
C'est bon, il manquait juste le f après print.
j'ai essayé ta technique en faisant :
public static void main(String[] args)
{
LigneCmd ligneA = new LigneCmd("1234", "Parapluie aluminium",8, 6.25);
System.out.println(ligneA);

LigneCmd ligneB = new LigneCmd("1222","Briquet gaz",21,1.25);
System.out.println(ligneB);

double somme = ligneA.montant() + ligneB.montant();
System.out.printf("Total : %.2f ", somme);
}
Mais la console m'affiche :
http://img824.imageshack.us/img824/9593/capture5t.png
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
"il manquait juste le f après print"
Non, les trois écritures existent : print, println, et printf (ce qui représente 21 méthodes en tout)

Pour ton erreur, c'est parce qu'il faut le définir ton constructeur à 4 arguments, ça ne se fait pas tout seul.
et comment faire pour le définir ? Sinon ça veut dire que print et printf désignent exactement la même chose ?
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
print fait il fait la même chose que println (le saut de ligne en moins...) alors que printf permet d'utiliser des arguments pour donner des valeurs aux %s, %d, %f, etc.
Mais effectivement, si tu ne mets pas de %, print et printf feront la même chose (dans ce cas), mais en général ce seront deux méthodes différentes...

Pour définir un constructeur, c'est comme pour une méthode, mais qui n'aurait pas de type de retour, et qui porterait le même nom que la classe.

public LigneCmd(String reference, String nom, double prixUnitaire, int quantite)
{
    refArticle = reference;
    nomArticle = nom;
    prixU = prixUnitaire;
    this.quantite = quantite; // ici on est obligé de mettre "this" pour lever l'ambiguïté entre le nom du paramètre du constructeur, et le membre de classe, qui s'appellent tous les deux "quantite"
}
j'ai bien mis le constructeur comme ceci :
public class LigneCmd {

private String refArticle;
private String nomArticle;
private double prixU;
private int quantite;

public double montant() {
return this.prixU * this.quantite;
}

public LigneCmd(String reference, String nom, double prixUnitaire, int quantite)
{
refArticle = reference;
nomArticle = nom;
prixU = prixUnitaire;
this.quantite = quantite;
}



public String toString() {
return String.format(
"[ref=%s; nom=%s; nbr=%d; pxU=%.2f; pxT=%.2f]"
, refArticle, nomArticle, quantite, prixU, montant() );

}


public String getRefArticle() {
return this.refArticle;
}

public void setRefArticle(String uneRefArticle) {
this.refArticle = uneRefArticle;
}
public String getNomArticle() {
return this.nomArticle;
}

public void setNomArticle(String uneNomArticle) {
this.nomArticle = uneNomArticle;
}

public int getQuantite() {
return this.quantite;
}

public void setQuantite(int uneQuantite) {
this.quantite = uneQuantite;
}

public double getPrixU() {
return this.prixU;
}

public void setPrixU(double unPrixU) {
this.prixU = unPrixU;
}





}
Mais il y a toujours un problème.
Messages postés
16025
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 septembre 2020
2 663
Effectivement, il y a une erreur de logique entre mes deux codes, il faudrait inverser les paramètres 3 et 4 (soit dans le constructeur, soit dans le main).
Et bien j'ai appris beaucoup de choses ce soir, je te remercie vraiment.
Quel bonheur de voir ce message dans la console !!!
http://img526.imageshack.us/img526/5396/capture514.png
Encore merci !
Passe une bonne soirée.