Class java

Fermé
azerty0123 - 23 déc. 2011 à 22:38
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 25 déc. 2011 à 20:41
Bonjour,

J'ai quelques questions (beaucoup même) sur un exercice.

Je vous ecris la totalité de l'exercice pour mieux comprendre:
On se propose de travailler sur une classe Electron qui permettrait de manipuler les proprietes
d'un electron dans un atome.
Pour rappel, dans un atome polyelectronique, un electron est reperé par quatre nombres quantiques:
n, l, m et ms avec les propri'et'es suivantes :
n > 0 ; 0  l <= n ; -l <=m <=+l ; ms = +10.5 ou -0.5

Dans la classe Electron, les nombres n, l et m seront identifies par des entiers tandis que le
spin ms sera identifie par un boolean (vrai pour +0.5 et faux pour -0.5).

On doit obtenir les resultats suivants
n = 1 ; l = 0 ; m = 0 ; s p i n = +1/2
n = 3 ; l = 1 ; m = -1; s p i n = -1/2
Les deux e l e c t r o n s s o n t d i f f e r e n t s.

Et donc voici le programme que l'on doit obtenir:

public class Electron
{
private int n;
privtate int l;
private int m;
private boolean ms;

public Electron()
{
n=1;
l=0;
m=0;
ms=true;
}
public void SeN(int n)
{ this.n=n;}
public void SetL(int n)
{ this.l=n;}
pourquoi on dis que this.l=n alors qu'on a deja definit n pour SetN, pourquoi pas this.l=l vu qu'on a defini l au debut
public void SetM(int n)
{this.m=n;}
Pourquoi pas this.m=m?
public void SetMs(boolean n)
{ this.ms=n;}
Pourquoi pas this.ms=ms?

public void affiche()
{
if (ms) if(ms) quoi? if(ms==true) serait mieu non?
{system.out.printf("n=%d;l=%d;m=%d;spin=+0.5\n", n, l ,m);}
else
{system.out.printf("n=%d;l=%d;m=%d;spin=-0.5\n", n, l ,m);}
}

public boolean existe ()
{
if(n>0&& l<n && l>=0 && m>=-l && m<=l)
{ return true;}
else{returne false;}
}

public static boolean Pauli(Electron e1, Electron e2)
{ if (e1.n==e2.n&& e1.l==e2.l &&e1.m==e2.m && e1.ms==e2.ms)
{return true;}
else { return false;}
}
}

public static void main (String[] args)
{
Electron e1;
Pour les valeurs de e1 (du debut) on a pas signalé que ces valeurs correspondait à e1, comment le programme sait que e1 corresponds à ces valeurs?
e1=new Electron();
if(e1.existe());
{ e1.affiche();}

Electron e2;
e2=new Electron();
e2.SetN(3);
e2.SetL(1);
e2.SetM(-1);
e2.SetMs(false);
if(e2.existe())
{
e2.affiche;}

if (Electron.Pauli(e1,e2)) if (Electron.Pauli(e1,e2)==true) ??
{ system.out.printf("Les deux electrons sont identiques\n");}
else{ system.out.printf("Les deux electrons sont difèrents\n);
}}}
A voir également:

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 déc. 2011 à 00:44
1) Pourquoi this.l=n et pas pas this.l=l ? idem pour m et ms
Parce que le paramètre de la méthode s'appelle n, et non l
Si tu avais SetL(int l), alors là oui, il aurait fallu mettre this.l=l
Mais si tu fais this.l=l, alors que l n'est pas un paramètre de la méthode alors, ce sera le champ de l'objet qui sera utilisé, et tu ferais quelque chose comme this.l = l, ce qui ne sers à rien vu que this.l et l sont - dans ce contexte - la même variable.

2) if(ms==true) ? idem pour Electron.Pauli(e1,e2)
La condition d'un if doit être vraie ou fausse, or ici ms est un booléen qui vaut donc, soit true, soit false. Si tu mets ms==true, c'est redondant car tu dis "si ms est vrai, alors c'est vrai, sinon c'est faux", mais cela revient au même que de dire "ms" tout seul.
Si ms==true, tu vas faire true==true et ça va donner true (la valeur de ms)
Si ms==false, tu vas faire false==true et ça va donner false (la valeur de ms)
Donc autant mettre ms, ça te fait une comparaison de moins à faire.

3) les valeurs de e1 ?
Lorsque l'on utilise e1 en faisant e1.uneMéthode, e1 est l'objet qui correspond au this dans la définition des méthodes, donc les valeurs qui sont utilisés sont donc e1.n, e1.l, e1.m qui ont toutes une valeur par défaut au départ (0, false, "", null...)
1
Je vous rassure, cela n'est pas un exercice, c'est une correction d'examen que j'essaye de comprendre.

Merci pour votre reponse KX.

Pour public void SeL(int n)
{ this.l=n;}
Ne serait ce pas plus logique d'ecrire :
void SetL(int l)
{this.l=l;} sachant qu'au dessus on a definit privtate int l; et l=0;


Et pour e1, on a definit les valeurs de l, m n et ms dans public Electron()
{
n=1;
l=0;
m=0;
ms=true;
}
Et pour "appeler ces valeurs on fait e1=new Electron(); en faites on appel Electron car les valeurs ont été definit dans Electron? Est ce que Electron est un classe? Parce que, pour moi e1=new Electron signifie qu'on appel une classe.


En tous cas merci infiniment, je comprends mieux la logique de la programmation java.
1
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
25 déc. 2011 à 20:41
1) Le fait qu'on la définisse private signifie que la variable l est inaccessible à l'utilisateur final, donc cela a peu d'importance de l'appeler l, n, toto, ou kshfqw, alors que par contre la méthode SetL est publique et son paramètre doit être intelligible et pas forcément unique. n est souvent utilisé comme nom des paramètres entiers. Cela n'est pas toujours logique quand on voit le code mais ça dépend du contexte de l'encapsulation, des conventions de codage, ou des idiotismes du développeur, mais cela ne change rien à la correction du code.
2) Oui Electron est une classe, dans le code tu as public class Electron ! Et en faisant new Electron(), tu appelles le constructeur Electron(), qui opère l'initialisation de n, l, m et ms. Appeler les valeurs internes n'a pas vraiment d'importance, ce qui nous intéresse c'est la valeur de l'électron dans son ensemble (en appelant ses méthodes), même si dans ton exemple cela revient au même.
0
-lolo666- Messages postés 566 Date d'inscription dimanche 11 septembre 2011 Statut Membre Dernière intervention 4 mai 2012 120
23 déc. 2011 à 22:45
On a pas le droit d'aider aux devoirs.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 déc. 2011 à 00:29
C'est un peu plus compliqué que cela ;-)

Si je me réfère à la fiche Demander de l'aide pour vos exercices :
"Ceux qui accepteront de vous aider ne sont pas là pour faire le travail à votre place. En revanche, ils peuvent vous guider, vous donner des axes de recherches, des détails techniques, vous aider à comprendre vos erreurs"
Ici il s'agit d'expliquer pourquoi le code correct l'est, et pourquoi on a pas fait autrement, il ne s'agit pas vraiment de faire l'exercice, contrairement à ce genre de post Svp c'est vraiment urgent, qui a été fermé par la modération en moins de deux minutes puisque lui est clairement hors charte !
0
-lolo666- Messages postés 566 Date d'inscription dimanche 11 septembre 2011 Statut Membre Dernière intervention 4 mai 2012 120
24 déc. 2011 à 16:26
D'accord... Bon bah si c'est marqué !
0