Problème de classe en Java....pitié ^^
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Salut tout le monde, voila j'implore votre aide ^^
J'ai, pour un TP, du écrire une classe Complexe pour...représenter les nombres complexes bien evidemment ^^
Ensuite j'utilise une classe TestComplexe pour.....hé oui tester ma classe Complexe comme vous l'aurez deviné !
MAIS !
Mon problème est que dans ma classe Test Complexe, alors que je teste pour voir si l'addition et la multiplication de Complexe fonctionne, je m'aperçois que la multiplication ne fonctionne pas comme je veux argh...il trouve bien la bonne partie entière, mais la partie imaginaire qu'il donne est.....imaginaire XD
Donc voici la classe Complexe :
Et voila ci-dessous la classe de test qui affiche dans la console les résultats dse opérations :
J'ai retourné ce code au moins 7 ou 8 fois, j'ai changé les noms des variables, j'ai tenté plein de trucs.....mais rien a faire la multiplication ne fonctionne pas comme elle devrait.....c'est pourquoi j'ai besoin de vous ^^
c3 * ctest :
résultat attendu / affiché ==> 52 + 86i / 52.0 + 214.0i
cx * cy :
résultat attendu / affiché ==> -7 + 11i / -7.0 + -29.0i
cy * cy :
résultat attendu / affiché ==> -16 + 30i / -16.0 + -160.0i
Au fait j'ai une petite question subsidiaire; quand j'essaie de déclarer un Complexe avec des coeficients réels dans le genre :
Hé ben Eclipse n'est pas trop d'accord.....il me demande soit de faire un cast de 3.5 en float, soit de changer le constructeur Complexe(float,float) en Complexe(double,float). Pourquoi ? Je ne comprends vraiment pas, un float suffit pourtant non ? Enfin voila, et ça me travaille depuis quelques jours sans que je trouve la solution ^^
Merci infiniment donc aux personnes qui prendront le temps de m'aider (et de lire mon code ;-)
J'ai, pour un TP, du écrire une classe Complexe pour...représenter les nombres complexes bien evidemment ^^
Ensuite j'utilise une classe TestComplexe pour.....hé oui tester ma classe Complexe comme vous l'aurez deviné !
MAIS !
Mon problème est que dans ma classe Test Complexe, alors que je teste pour voir si l'addition et la multiplication de Complexe fonctionne, je m'aperçois que la multiplication ne fonctionne pas comme je veux argh...il trouve bien la bonne partie entière, mais la partie imaginaire qu'il donne est.....imaginaire XD
Donc voici la classe Complexe :
class Complexe {
private float reel;
private float imaginaire;
public Complexe(float reel, float imaginaire){
this.reel = reel;
this.imaginaire = imaginaire;
}
public Complexe(){
this.reel = 0;
this.imaginaire = 0;
}
public float getReel(){
return reel;
}
public float getImaginaire(){
return imaginaire;
}
public void multiScal(float scalaire){
reel = reel * scalaire;
imaginaire = imaginaire*scalaire;
}
public void additionCompl(Complexe c){
reel = reel + c.getReel();
imaginaire = imaginaire + c.getImaginaire();
}
public void multiComplexe(Complexe c){
reel = reel * c.getReel() - imaginaire * c.getImaginaire();
imaginaire = reel * c.getImaginaire() + imaginaire * c.getReel();
}
public void affichage(){
System.out.println( reel + " + " + imaginaire + "i");
}
}
Et voila ci-dessous la classe de test qui affiche dans la console les résultats dse opérations :
public class TestComplexe {
public static void main(String[] args) {
int x = 4;
Complexe c1 = new Complexe(3,4);
Complexe c11 = new Complexe(3,4);
Complexe ctest = new Complexe(3,4);
Complexe c2 = new Complexe(5,-10);
Complexe c3 = new Complexe(20,2);
Complexe cx = new Complexe(1,2);
Complexe cy = new Complexe(3,5);
c1.multiScal(x); // c1 * x
c1.affichage(); // affichage
c11.additionCompl(c2); // c11 + c2
c11.affichage(); //affichage
c3.multiComplexe(ctest); // c3 * ctest
c3.affichage(); // affichage
cx.multiComplexe(cy); // cx * cy
cx.affichage(); // affichage
cy.multiComplexe(cy); // cy * cy
cy.affichage(); // affichage
}
}
J'ai retourné ce code au moins 7 ou 8 fois, j'ai changé les noms des variables, j'ai tenté plein de trucs.....mais rien a faire la multiplication ne fonctionne pas comme elle devrait.....c'est pourquoi j'ai besoin de vous ^^
c3 * ctest :
résultat attendu / affiché ==> 52 + 86i / 52.0 + 214.0i
cx * cy :
résultat attendu / affiché ==> -7 + 11i / -7.0 + -29.0i
cy * cy :
résultat attendu / affiché ==> -16 + 30i / -16.0 + -160.0i
Au fait j'ai une petite question subsidiaire; quand j'essaie de déclarer un Complexe avec des coeficients réels dans le genre :
Complexe c = new Complexe(3.5,4);
Hé ben Eclipse n'est pas trop d'accord.....il me demande soit de faire un cast de 3.5 en float, soit de changer le constructeur Complexe(float,float) en Complexe(double,float). Pourquoi ? Je ne comprends vraiment pas, un float suffit pourtant non ? Enfin voila, et ça me travaille depuis quelques jours sans que je trouve la solution ^^
Merci infiniment donc aux personnes qui prendront le temps de m'aider (et de lire mon code ;-)
Configuration: Windows Vista Internet Explorer 7.0
5 réponses
-
-
Bonjour,
Pour:
Complexe c = new Complexe(3.5,4); écrire Complexe c = new Complexe(3.5f,4); (3.5f ou 3.5F)
Sinon 3.5 est double par défaut.
Pour le reste je vais regarder.
A++
Cordialement,
Dan-
Ouf merci beaucoup ^^
Ha d'accord en fait je ne savais pas que c'était un double par défaut.....donc si je comprends bien il vaut mieux à la base déclarer un double plutot qu'un float quoi....merci !- Salut,
Pourquoi pas, mais (oui il y a quand même un mais que ce soit un double ou un float...) :
Prenon le cas float, si l'on fait par exemple
Complexe c3 = new Complexe(29999991234,2f); sans décimales donc
java considère qu'il doit reserver en mémoire un emplacement pour un integer.
Le mais: c'est que 29999991234 dépace la longueur maxi d'un int et nous avons ce message "integer number too large: 29999991234" lors de la compilation. (ce serait pareil avec un long par exemple et bien entendu un double)
La conclusion est qu'il vaut mieux ajouter le f, ou le d, voir le l
Dan
-
-
Bonjour,
Bon, j'ai testé en ajoutant quelques traces (println), notamment dans les getReel et getImaginaire
public float getReel(){
System.out.println( "getReel>>>>>>>>>>>>> reel = " + reel);
return reel;
}
public float getImaginaire(){
System.out.println( "getimaginaire>>>>>>>>>>>>> imaginaire = " + imaginaire);
return imaginaire;
}
Et, comme on pouvait s'y attendre, tel que c'est écri, les résultats obtenus sont tout à fait correct .
J'aimerais savoir pourquoi on attend, par exemple pour c3, le résultat 52 + 86 (je ne parle pas des .0 car nous travaillons avec des float et nous pourions avoir des décimales autres que .0)
J'attend donc de savoir pourquoi on attend 86 pour modifier et obtenir ce résultat.
Cordialement,
Dan -
Désolé pour mon retard ^^ mais j'ai pas internet chez moi donc je dois me taper le trajet jusqu'a l'université XD
Pour c3 on fait l'opération c3 * ctest = (20+2i) * (3+4i) = 52 + 86i
D'ou le résultat qu'on attend.
Enfin à moins que je ne me sois trompé dans la multiplication ??????? La honte...... -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
Bon j'ai vu pourquoi on a 214 et pas 86:
Avant le second calcul reel est à 52 (résultat du 1er calcul) et n'est plus à 20 la valeur initiale passée par Complexe c3 = new Complexe(20,2);
Si on ne veut pas tenir compte du 1er calcul
Pour faire le second calcul avec 20, il suffit de sauvegarder avant de faire le 1er calcul float reelSv = reel;
et réinitialiser avant le second reel = reelSv;
Soit:
public void multiComplexe(Complexe c){
float reelSv = reel;
reel = reel * c.getReel() - imaginaire * c.getImaginaire();
reel = reelSv;
imaginaire = reel * c.getImaginaire() + imaginaire * c.getReel();
Cordialement,
Dan-
Mon sauveuuuuuuuuuuuuur ^^
Merci infiniment tu as toute ma gratitude, ma reconnaissance et tout et tout....;toi, t'iras au paradis c'est sur XD
En plus jamais j'aurais pensé à ça......merci merci merci tu me débloque là, j'arrivai plus a réfléchir sur la suite de mes exos tout en sachant que j'arrivai pas a faire fonctionner un "simple" (pas tant que sa :-) programme d'addition de complexes....
Merciiiiiiiiiiiiiiiiiiiii et topic résolu bien sur !
A bientot pour de nouvelles aventures ^^
-