Problemes d'imbrication en java

Fermé
jean marc - 10 mai 2004 à 10:34
 jean marc - 14 mai 2004 à 15:32
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 lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
10 mai 2004 à 12:18
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
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
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
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
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
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
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
de nada :)

Nico
0
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
Je crois que tu as oublié un s à Spectre (ligne 1)
0
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
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
Salut, merci pour ta réponse.
Ca m'est d'un grand secours.
Encore merci.
Jean Marc
0