Bonjour !
Voila je m'entraine à programmer sous java. Ayant des bonnes connaissances en C/C++, je m'initie à ce langage.
Le probleme que j'ai est un probleme didactique en le sens ou la résolution plus optimisée de mon code ne m'interesse pas, je cherche juste a comprendre.
Voila mon code:
import java.lang.Math;
import java.util.Scanner;
public class programme {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("Choisir un nombre a decomposer: ");
int n=sc.nextInt();
int[] b=decomposeBinaire(n);
System.out.println("La decomposition est:");
for (int i=b.length-1;i>=0;i--){
System.out.println(b[i]);
}
}
public static int[] decomposeBinaire(int a){
int n; int[] b;
if(a==0){
b=new int[1];
b[0]=0;
return b;
}
else{
int tmp;
n=(int) Math.ceil(Math.log(a));
b=new int[n+1]; b[n]=1;
tmp=a-(int)Math.pow(2.0,n);
while(tmp!=0){
n--;
int p=(int)Math.pow(2.0, n);
if(tmp>=p){
b[n]=1;
tmp=tmp-p;
}
else{
b[n]=0;
}
}
return b;
}
}
}
Lorsque je rentre un nombre "petit" comme 8,10,... cela marche sans probleme.
Lorsque je rentre ne serait ce que 1024 eclipse me jete a la figure une exception:
Citation
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at programme.decomposeBinaire(programme.java:33)
at programme.main(programme.java:10)
Manifestement je deborde de mon tableau mais je ne comprends pas ou. Merci de votre aide.
Reedition: Finalement j'ai trouvé mon erreur. Le logarithme est le logarithme naturel et pas le logarithme en base 2. Merci
Initiation a java
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.