Problemes d'imbrication en java

jean marc -  
 jean marc -
Bonjour,
J'ai un probleme d'imbrication ou d'encapsulage en Java.
Sur mon programme, j'ai ecrit dans l'ordre:
class programme
{variable1;

public static void main(String[] args)
{programme principal avec variable1;
toto();}

public void toto()
{utilisant variable1};}

En fait il ne reconnait pas les variables de la class programme qui varient tout le long du probleme, et je ne sais pas comment faire pour regler cela.
Si vous pouviez m'aider, merci d'avance
A voir également:

10 réponses

maily Messages postés 7556 Date d'inscription   Statut Contributeur Dernière intervention   453
 
Bonjour,

pourrais tu mettre ton code en entier, cela serait plus simple pour mieux comprendre ton problème!!



 Maily   :-)))) L'hirondelle ne fait pas le printemps
mais le dromadaire fait le désert.
0
jean marc
 
Mon programme est le suivant, merci d'avance:

public class Terfixe2
{
int scouche=1;
int nElec=4;
int ms=-1;
int ml=-scouche;
int nSpinO=2*(2*scouche+1);
int m;
int tab[][]=new int[3][1+nSpinO];
int mElec;
int kElec;
int MS;
int ML;

public void main(String[] args)
{
System.out.println ("Lsup = " + Lsup);
System.out.println ("maxElec = " + maxElec);
System.out.println ("maxSpinO = " + maxSpinO);
System.out.println ("nbLmax = " + nbLmax);
System.out.println ("nbSmax = " + nbSmax);
System.out.println ("scouche = " + scouche);
System.out.println ("nElec = " + nElec);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
System.out.println ("nSpinO = " + nSpinO);
for (m=1 ; m<=nSpinO; m++)
{tab[0][m] = ms ;//mis(m)
ms=-ms;
tab[1][m] = ml;//mil(m)
if ((m/2)*2==m)
{ml=ml+1;
}
}
System.out.println ("mis(m) = " + tab[0][m-1]);
System.out.println ("mil(m) = " + tab[1][m-1]);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
int MLmax=0;
int MSmax=0;
for (mElec=1 ; mElec<=nElec; mElec++)
{tab[2][mElec] = mElec ;
}//Indx(mElec)
System.out.println ("Indx(mElec) = " + tab[2][mElec-1]);

toto();

tab[2][m-1]=1+tab[2][m-1];//Indx(mElec)
System.out.println ("Indx(mElec) = " + tab[2][m-1]);
for (kElec=mElec+1 ; kElec<=nElec; kElec++)
{tab[2][kElec]=1+tab[2][kElec-1];
}
if ((tab[2][m-1])>(nSpinO+mElec-nElec))
{mElec=mElec-1;
if (mElec<=0)
{System.out.println ("c gagne " + mElec);
}
}
}

public void toto()
{
int mElec=nElec;
System.out.println ("mElec = " + mElec);
for (kElec=1 ; kElec<=nElec; kElec++)
{MS=MS+tab[0][kElec];
ML=ML+tab[1][kElec];
}
System.out.println ("MS = " + MS);
System.out.println ("ML = " + ML);
for (m=1 ; m<=nElec; m++)
{System.out.println ("Indx("+m+") = " + tab[2][m]);
}
}
}
0
Nico
 
Yop,

ben il te manque plein de déclaration :
Lsup, maxElec, maxSpinO, nbLmax, nbSmax. Tu t'en sers dans le main mais tu ne les as pas déclarées au-dessus. Donc forcément ca plante. De plus il faut que tu déclares la méthode main comme suit :
public static void main(String [] args) {}
Je te conseille alors de faire ce que fait ton main dans le constructeur. Tu auras moins de pb.

++

Nico
0
jean marc
 
En fait je me suis trompé dans le programme que j'ai envoyé sur le net mais meme en mettant public <static> void main... il ne comprend pas qu'il doit utiliser les variables du debut pour tout le programme (main+toto):

public class Terfixe3
{
int scouche=1;
int nElec=4;
int ms=-1;
int ml=-scouche;
int nSpinO=2*(2*scouche+1);
int m;
int tab[][]=new int[3][1+nSpinO];
int mElec;
int kElec;
int MS;
int ML;

public static void main(String[] args)
{
int Lsup=6;
int maxElec=2*(2*Lsup+1);
int maxSpinO=maxElec;
int nbLmax=Lsup*(Lsup+1);
int nbSmax=2*Lsup+1;

System.out.println ("Lsup = " + Lsup);
System.out.println ("maxElec = " + maxElec);
System.out.println ("maxSpinO = " + maxSpinO);
System.out.println ("nbLmax = " + nbLmax);
System.out.println ("nbSmax = " + nbSmax);
System.out.println ("scouche = " + scouche);
System.out.println ("nElec = " + nElec);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
System.out.println ("nSpinO = " + nSpinO);
for (m=1 ; m<=nSpinO; m++)
{tab[0][m] = ms ;
ms=-ms;
tab[1][m] = ml;
if ((m/2)*2==m)
{ml=ml+1;
}
}
System.out.println ("mis(m) = " + tab[0][m-1]);
System.out.println ("mil(m) = " + tab[1][m-1]);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
int MLmax=0;
int MSmax=0;
for (mElec=1 ; mElec<=nElec; mElec++)
{tab[2][mElec] = mElec ;
}
System.out.println ("Indx(mElec) = " + tab[2][mElec-1]);

toto();

tab[2][m-1]=1+tab[2][m-1];
System.out.println ("Indx(mElec) = " + tab[2][m-1]);
for (kElec=mElec+1 ; kElec<=nElec; kElec++)
{tab[2][kElec]=1+tab[2][kElec-1];
}
if ((tab[2][m-1])>(nSpinO+mElec-nElec))
{mElec=mElec-1;
if (mElec<=0)
{System.out.println ("c gagne " + mElec);
}
}
}

public void toto()
{
int mElec=nElec;
System.out.println ("mElec = " + mElec);
for (kElec=1 ; kElec<=nElec; kElec++)
{MS=MS+tab[0][kElec];
ML=ML+tab[1][kElec];
}
System.out.println ("MS = " + MS);
System.out.println ("ML = " + ML);
for (m=1 ; m<=nElec; m++)
{System.out.println ("Indx("+m+") = " + tab[2][m]);
}
}
}
0
Nico
 
Tu ne m'as pas écouté, donc voila la correction de ton programme :

public class Terfixe3
{
int scouche=1;
int nElec=4;
int ms=-1;
int ml=-scouche;
int nSpinO=2*(2*scouche+1);
int m;
int tab[][]=new int[3][1+nSpinO];
int mElec;
int kElec;
int MS;
int ML;

public Terfixe3() {
int Lsup=6;
int maxElec=2*(2*Lsup+1);
int maxSpinO=maxElec;
int nbLmax=Lsup*(Lsup+1);
int nbSmax=2*Lsup+1;

System.out.println ("Lsup = " + Lsup);
System.out.println ("maxElec = " + maxElec);
System.out.println ("maxSpinO = " + maxSpinO);
System.out.println ("nbLmax = " + nbLmax);
System.out.println ("nbSmax = " + nbSmax);
System.out.println ("scouche = " + scouche);
System.out.println ("nElec = " + nElec);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
System.out.println ("nSpinO = " + nSpinO);
for (m=1 ; m<=nSpinO; m++)
{tab[0][m] = ms ;
ms=-ms;
tab[1][m] = ml;
if ((m/2)*2==m)
{ml=ml+1;
}
}
System.out.println ("mis(m) = " + tab[0][m-1]);
System.out.println ("mil(m) = " + tab[1][m-1]);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
int MLmax=0;
int MSmax=0;
for (mElec=1 ; mElec<=nElec; mElec++)
{tab[2][mElec] = mElec ;
}
System.out.println ("Indx(mElec) = " + tab[2][mElec-1]);

toto();

tab[2][m-1]=1+tab[2][m-1];
System.out.println ("Indx(mElec) = " + tab[2][m-1]);
for (kElec=mElec+1 ; kElec<=nElec; kElec++)
{tab[2][kElec]=1+tab[2][kElec-1];
}
if ((tab[2][m-1])>(nSpinO+mElec-nElec))
{mElec=mElec-1;
if (mElec<=0)
{System.out.println ("c gagne " + mElec);
}
}

}

public static void main(String[] args)
{
Terfixe3 t = new Terfixe3();
}

public void toto()
{
int mElec=nElec;
System.out.println ("mElec = " + mElec);
for (kElec=1 ; kElec<=nElec; kElec++)
{MS=MS+tab[0][kElec];
ML=ML+tab[1][kElec];
}
System.out.println ("MS = " + MS);
System.out.println ("ML = " + ML);
for (m=1 ; m<=nElec; m++)
{System.out.println ("Indx("+m+") = " + tab[2][m]);
}
}
}

++

Nico
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nico
 
Ton problème vient du fait que tu fais tout dans le main. La méthode main est une méthode statique. Or une méthode statique ne contient que des variables statiques. C'est pourquoi il faut que tu fasses appel au constructeur de la classe et c'est dans ce constructeur que tu vas initialiser tes variables de la classe. L'exemple que je te donne est un mauvais exemple de programmation objet car je fais tout dans le constructeur. Normalement le constructeur n'est la que pour initialiser les variables de ta classe. Mais ca marche comme ca.

++

Nico
0
jean marc
 
Merci Nico, ca marche!!!!!!!!!!!!!!!
C'est cool ca!!!!
C'est pt etre pas la meilleure methode comme tu as dit, mais ca marche, c'est l'essentiel.
Encore merci
0
Nico
 
de nada :)

Nico
0
jeanmarc50
 
Salut,
En effet, j'ai un nouveau problème que je n'arrive pas a résoudre concernant la méthode qu'on m'avait envoyée.
J'ai essayé plusieures choses mais sans succès.
Mon programme est le suivant:

public class Spectre
{ int scouche=1;int nElec=4;
int ms=-1;int ml=-scouche;
int nSpinO=2*(2*scouche+1);
int tab[][]=new int[3][1+nSpinO];
int mElec;int kElec;int MS;int ML;int L;int m;int nTS;int y; int x;
int MLmax=0;int MSmax=0;

public Spectre()
{int Lsup=6;
int maxElec=2*(2*Lsup+1);
int maxSpinO=maxElec;
int nbLmax=Lsup*(Lsup+1);
int nbSmax=2*Lsup+1;
System.out.println ("Lsup = " + Lsup);
System.out.println ("maxElec = " + maxElec);
System.out.println ("maxSpinO = " + maxSpinO);
System.out.println ("nbLmax = " + nbLmax);
System.out.println ("nbSmax = " + nbSmax);
System.out.println ("scouche = " + scouche);
System.out.println ("nElec = " + nElec);
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
System.out.println ("nSpinO = " + nSpinO);
for (m=1 ; m<=nSpinO; m++)
{tab[0][m] = ms ;
ms=-ms;
tab[1][m] = ml;
if ((m/2)*2==m)
{ml=ml+1;
}
System.out.println ("mis("+m+") = " + tab[0][m]);
System.out.println ("mil("+m+") = " + tab[1][m]);
System.out.println ("");
}
System.out.println ("ms = " + ms);
System.out.println ("ml = " + ml);
for (mElec=1 ; mElec<=nElec; mElec++)
{tab[2][mElec] = mElec ;
System.out.println ("Indx("+mElec+") = " + tab[2][mElec]);
}

retour10();
}

public static void main(String [] args)
{Spectre t=new Spectre();
}

public void retour10()
{System.out.println ("on est ds la partie 10");
mElec=nElec;
ML=0;
MS=0;
for (kElec=1 ; kElec<=nElec; kElec++)
{x=tab[2][kElec];
MS=MS+tab[0][x];
ML=ML+tab[1][x];
System.out.println ("ML("+kElec+") = " + ML);
System.out.println ("MS("+kElec+") = " + MS);
System.out.println ("");
}
if (ML<=MLmax)
{MLmax=MLmax;
}
else{MLmax=ML;
}
if (MS<=MSmax)
{MSmax=MSmax;
}
else{MSmax=MS;
}
System.out.println ("MLmax = " + MLmax);
System.out.println ("MSmax = " + MSmax);
for (m=1 ; m<=nElec; m++)
{y=m;
System.out.println ("Indx("+m+") = " + tab[2][m]);
}
float s=MS;
s=s/2;
System.out.println ("ML = " + ML + " MS = " + s);
retour20();
}

public void retour20()
{System.out.println ("on est dans la partie 20");
tab[2][y]=1+tab[2][y];//Indx(mElec)
System.out.println ("Indx("+y+") = " + tab[2][y]);
for (kElec=y+1 ; kElec<=nElec; kElec++)
{tab[2][kElec]=1+tab[2][kElec-1];//Indx(kElec)
}
retour30();
}

public void retour30()
{System.out.println ("on est ds la partie 30");
if ((tab[2][y])>(nSpinO+y-nElec))
{y=y-1;
if (y<=0)
{retour100();
}
else{retour20();
}
}
retour10();
}

public void retour100()
{System.out.println ("on est ds la partie 100");
System.out.println("nTS");
retour110();
}

public void retour110()
{System.out.println ("on est ds la partie 110");
for (ml=-MLmax ; ml<=MLmax ; ml++)
{System.out.println ("ml = " + ml);
}
retour120();
}

public void retour120()
{System.out.println ("on est ds la partie 120");
ms=MSmax;
L=-1;
for (ml=0 ; ml<=MLmax ; ml++)
{L=ml;
}
if (L==-1)
{MSmax=MSmax-2;
if (MSmax<0)
{retour200();
}
retour120();
}
System.out.println ("MSmax = " + MSmax);
nTS=nTS-1;
if (nTS==0)
{retour200();
}
}

public void retour200()
{System.out.println ("fin du programme");
}
}


Mon programme s'effectue bien au début mais le problème est que dans "public void retour30()", apres avoir fait "retour100()", le programme effectue de nouveau "retour10()".
J'ai essayé de l'en empêcher avec un "break", mais je n'ai pas réussi.
Si vous pouviez m'aider encore, ce serait sympa.
D'avance merci
Jean Marc
0
monitorX
 
Je crois que tu as oublié un s à Spectre (ligne 1)
0
jean marc
 
Salut,
Je crois pas avoir oublié un "s" à la première ligne sur "Spectre", non?
Merci quand même d'avoir répondu
Jean Marc
0
Nico
 
Yop,

si tu veux qu'une fois le retour100 a été fait qu'il sorte de la méthode retour30 il faut utiliser return pour sortir de la méthode.
Tu peux répéter cette opération pour les autres cas de ta méthode si c'est le meme cas.

public void retour30()
{System.out.println ("on est ds la partie 30");
if ((tab[2][y])>(nSpinO+y-nElec))
{y=y-1;
if (y<=0)
{retour100();
return;
}
else{retour20();
}
}
retour10();
}

Nico
0
jean marc
 
Salut, merci pour ta réponse.
Ca m'est d'un grand secours.
Encore merci.
Jean Marc
0