Partage
  • Partager sur Facebook
  • Partager sur Twitter

Initiation a java

Non sans probleme

Sujet résolu
    23 janvier 2011 à 19:13:29

    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
    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown