Puissances de 2

blastus -  
 pseudo -
Bonjour,

je butes sur une fonction , j ai constament un message d 'erreur du compilateur ...
c est une fonction qui ai censé décomposer un nombre en puissances de 2 . par exemple dans ce cas 107
pour que cela donne 2 puissance 6 +2 puissance 5 + 2 p3 + 2 +1

par avance merci pour vos conseils .
Cordialement

public class ok {
public static void main ( String[] args ){

/* fonction qui doit decomposer un nombre en puissances de 2 sous la forme 2 puissance 6 + 2 puissance 5 + n .... + 2 + 1 et rentrer ces valeur dans un tableau */
/* dB etant le nombre à decomposer */
int i=0,p=0,reste,dB=107;
reste=dB;
int t[] ;t=new int[10];
while (reste!=0)

while (Math.pow(2,p)<reste){
p=p+1;}/*premiere boucle s'arretant dés que la puissance apliqué à 2 donne un nombre qui dépasse dB*/

p=p-1;/* bou de code sancé rentrer dans la case du tableau la valeur trouvé , et : remet la puissance à 0 , deduis le prochain reste sur lequel la boucle while du haut vas chercher
la puissance */
t[i]=(int)Math.pow(2,p);
p=0;
reste=reste-t[i];
i=i+1;

}
}
A voir également:

1 réponse

CréNomDunChien
 
Bonjour,

Quel est le message du compilo. ?..

Remarque :

public class ok {

public static void main ( String[] args ){

--> Je ne pense pas qu'envelopper le main() dans une classe fonctionne mais bon (:>)..

En générale c'est cette structure :

public class ok { ...}

Puis :

public static void main ( String[] args )
{

--> Instanciation classe ok + traitements

}
1
pseudo
 
Le problème est dans la condition d'arrêt de ta boucle la plus haute.
En effet, tu ne vérifies pas la valeur de "p" avant de la décrémenter, tu te te retrouve donc avec un p = "-1" et tu ne sors jamais de la boucle. ce qui fait crasher ta JVM par débordement de pile.
Solution (ligne 10)
if(p>0){
p=p-1
}
au lieu de
p=p-1
0