Java; problème sur mon tableau càd BigInteger avec le tableau
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Java; problème sur mon tableau càd BigInteger avec le tableau



  1. #1
    saniadaff

    Java; problème sur mon tableau càd BigInteger avec le tableau


    ------

    Bonsoir;

    je veux transformer le code de ma formule en int vers BigInteger mais l'accès du tableau ne passe pas encore chez moi;
    Voici les lignes qui ont des problèmes:

    Code:
    // regarder dans les commentaire de chaque ligne pour comprendre ce que je veux faire
    		BigInteger deux = new BigInteger("2");	
    		
    		BigInteger i = AV((deux.multiply(n)).mod(new BigInteger("30")));  //  int  i=AV[(2*n)%30];	
    		
    		BigInteger j = Div1((deux.multiply(n)).add(BigInteger.valueOf(i)));	//int j=Div1(2*n+i);
    		
    		
    		BigInteger form = (deux.multiply(n)).add(BigInteger.valueOf(i)).(deux.multiply(n)).add(BigInteger.valueOf(BigInteger.valueOf(j).sub(new BigInteger("1")))));  //int form=2*n+i+2*(j-1) ;
    Et voici le code complet:
    Code:
    package FormuleBigInteger1;
    
    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    
    
    public class FormuleBigInteger1 {
    	
    	public static void main(String[] args) {
    		FormuleBigInteger1  P1 = new FormuleBigInteger1 ();
    	Scanner keby = new Scanner(System.in);
    
    	System.out.println("Veuillez saisir le rang inferieur n1 et superieur n2 :");
    	 BigInteger s=keby.nextBigInteger();
    	 BigInteger m=keby.nextBigInteger();
    	 for (BigInteger x = s ; x.compareTo(m) == -1 || x.compareTo(m) == 0;x = x.add(new BigInteger("1")) ) {	
    
    			System.out.printf("\n"+ P1.Formule2(x));
    
    
    	}
    	keby.close();
    	}
    	public BigInteger Formule3 (BigInteger n){
    		//long p=0;
    		//BigInteger i;
    		
    		
    		
    		int  AV[] ={
    			    1,   6,   5,   4,   3,   2,
    			     1,   4,   3,   2,   1,  2,
    			     1,  4,  3,  2, 1, 2,
    			     1,  4, 3, 2,  1,  6,
    			     5,  4,  3,  2,  1, 2
    			};	
    		
    		// regarder dans les commentaire de chaque ligne pour comprendre ce que je veux faire
    		BigInteger deux = new BigInteger("2");	
    		
    		BigInteger i = AV((deux.multiply(n)).mod(new BigInteger("30")));  //  int  i=AV[(2*n)%30];	
    		
    		BigInteger j = Div1((deux.multiply(n)).add(BigInteger.valueOf(i)));	//int j=Div1(2*n+i);
    		
    		
    		BigInteger form = (deux.multiply(n)).add(BigInteger.valueOf(i)).(deux.multiply(n)).add(BigInteger.valueOf(BigInteger.valueOf(j).sub(new BigInteger("1")))));  //int form=2*n+i+2*(j-1) ;	
    		
    		
    		
    		if ( n.compareTo(BigInteger.valueOf(2))<=0 ){
    			
    			return Formule2 (n);
    			
    		}else if (Div1(form).compareTo(BigInteger.valueOf(1))==0){
    		
    			return form;
    		
    	   }else{
    		   
    		     return Formule2 (n);	
    		
    	   }
    		
    	}
    	
    	public BigInteger Div1 (BigInteger n) {	
    		
    		//BigInteger d=sqrt(n);
    
    		 
    	      int step;
    	   
    	      
    		    if ( n.compareTo(BigInteger.valueOf(5))<0 ) {
    		    	
    		    	
    		    	if((n.compareTo(BigInteger.valueOf (2)) == 0) || (n.compareTo(BigInteger.valueOf (3)) == 0))  {			    	    
    		    	
    		    		 return BigInteger.valueOf (1) ;
    		    	 }
    		    	 
    		    	 else {
    		    		 
    		    	
    		    		 return BigInteger.valueOf (2);
    		            
    		            }
    		    	 
    		          } 
    		            else  if((n.mod(new BigInteger("6")).equals(BigInteger.ZERO))||(n.mod(new BigInteger("6")).equals( BigInteger.valueOf(2)))||(n.mod(new BigInteger("6")).equals( BigInteger.valueOf(4)))) 
    		            {
    		                   
    		            	return BigInteger.valueOf (2);
    		            
    		            }  
    		            
    		            else if (n.mod(new BigInteger("6")).equals( BigInteger.valueOf(3))) {
    		                        
    		            	return BigInteger.valueOf (3);
    		                  
    		            }
    		                         else {
    		           
    		        step=2;
    		        int  i= 5;
    		     
    		        while (BigInteger.valueOf(i).multiply(BigInteger.valueOf(i)).compareTo(n) <= 0)  {
    		            
    		    	 if (n.mod(BigInteger.valueOf(i)).equals( BigInteger.valueOf(0))) {
    		    		 
    		    		 return BigInteger.valueOf (i);
    		    	 }
    		    	else {
    		           
    		    		i=i+ step;
    		    	 
    		            if ( step==2) {
    		                step= 4;
    		         }
    		        else {
    		               
    		            	step=2;
    		            }
    		    	 }
    		     }
    		        return BigInteger.valueOf (1);
    		        
    		                         }
    		    }
    
    
    
    
    	public BigInteger Formule2 (BigInteger n){
    
    	BigInteger p=new BigInteger("0");
    	
    	loop1:	
    	
    	for (BigInteger j = n ; j.compareTo(n.multiply(new BigInteger("2"))) < 0 /*|| j.compareTo(n.multiply(new BigInteger("2"))) == 0*/;j = j.add(new BigInteger("1")) ) {	
    
    	n=j;	
    		
    	int i=0;
    	int r=0;
    	
    	BigInteger deux = new BigInteger("2");				
    	BigInteger control = (deux.multiply(n)).add(new BigInteger("1")); 
    	BigInteger Q = Div1((deux.multiply(n)).add(new BigInteger("1")));		
    	BigInteger b = Q;
    	long sortie = 0;
    	
    	ArrayList<BigInteger> K= new ArrayList<BigInteger> ();
    	K.add((deux.multiply(n)).add(new BigInteger("1")));
    	
    	
    	while ((Q.compareTo(new BigInteger("1")) <0) && (sortie == 0)) {
    	b = Q ;
    	control = (deux.multiply(n)).add(new BigInteger("Q")); 
    	Q = Div1((deux.multiply(n)).add(new BigInteger("Q")));		
    	r=K.size();
    	while (BigInteger.valueOf(i).compareTo(BigInteger.valueOf(r)) < 0)  {		
    
    	if (control== K.get(i) ) {
    
    	sortie = sortie + 1;
    
    	}
    
    	i=i+1;
    	}
    
    	K.add((deux.multiply(n)).add(new BigInteger("Q")));
    
    	}
    
    	if ((Q.compareTo(new BigInteger("1")) ==0) && (sortie == 0)) {
    		
    
    				
    	  p=(deux.multiply(n)).add(b);
    	  break loop1 ;
        
    
    
    	}
    	
    	
    	   }
    
    	return p; 
    
    	}
    	
    
    }
    Une pierre deux coups:

    voici aussi un autre version du code mais avec le signe moins que je dois faire après:

    Code:
                    i=AV[(2*n-1)%30];
    		j=Div1(2*n-1+i);
    		form=2*n-1+i+2*(j-1) ;
    Ce sont des lignes qui me reste a fin de parfaire mon code;

    Merci d'avance;

    -----
    Dernière modification par saniadaff ; 30/04/2022 à 18h25.

  2. #2
    Merlin95

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    T'as oublié le principal nécessaire voir suffisant : où sont les messages d'erreurs ??

  3. #3
    saniadaff

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Bonsoir
    Voici le code d'erreur:

    Code:
    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    	The method AV(BigInteger) is undefined for the type FormuleBigInteger1
    	The method valueOf(long) in the type BigInteger is not applicable for the arguments (BigInteger)
    	The method valueOf(long) in the type BigInteger is not applicable for the arguments (BigInteger)
    	Syntax error on token ".", Identifier expected after this token
    	The method valueOf(long) in the type BigInteger is not applicable for the arguments (BigInteger)
    	Syntax error on token ")", delete this token
    
    	at FormuleBigInteger1.FormuleBigInteger1.Formule3(FormuleBigInteger1.java:43)
    	at FormuleBigInteger1.FormuleBigInteger1.main(FormuleBigInteger1.java:20)

  4. #4
    Merlin95

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Hé bien cherche la raison de chacune de ces erreurs de compilation.

    Par exemple, la méthode BigInteger.valueOf prend en paramètre une variable de type long, et toi tu passes un BigInteger, ca n'a pas de sens, tu fais sans doute quelque chose qui n'a pas de sens ou ne sert à rien ou qui n'a pas été compris. Mais cimme je ne sais pas ce que tu cherches à faire, je peux pas t'aider complètement, c'est à toi de demander comment faire ceci ou cela, et on pourra répondre.

  5. A voir en vidéo sur Futura
  6. #5
    Paraboloide_Hyperbolique

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Citation Envoyé par Merlin95 Voir le message
    Mais cimme je ne sais pas ce que tu cherches à faire [...]
    Il s'agit de la reprise d'un fil qui a été fermé: https://forums.futura-sciences.com/p...-premiers.html

  7. #6
    pm42

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    Il s'agit de la reprise d'un fil qui a été fermé: https://forums.futura-sciences.com/p...-premiers.html
    Avec de grands moments du genre : le code en commentaire utilise bien les [] pour accéder aux éléments d'un tableau mais il a été remplacé par du code où c'est de parenthèses (voir
    Code:
    BigInteger i = AV(...
    )

    Et plutôt que simplement relire, c'est posté ici en mode "cherchez à ma place".

    Voir aussi la remarque de Merlin95 sur la construction des BigInteger, pourtant bien décrite dans la doc et avec un message d'erreur du compilateur explicite.

    La programmation, c'est de la rigueur et de chercher les erreurs. Sans aucun des deux, c'est mal barré.

  8. #7
    saniadaff

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    C'est ce cette ligne qui pose le premier problème int i=AV[(2*n)%30]; l'erreur est au niveau de n qui est biginteger; alors que le contenu du tableau est int en même temps que son indice qui est aussi int; et pourtant l'erreur affichée est l’opérateur *
    c'est pour quoi je l'ai remplacé par:



    Code:
                      BigInteger deux = new BigInteger("2");	
    		
    		BigInteger i = AV[(deux.multiply(n)).mod(new BigInteger("30"))];  //  int  i=AV[(2*n)%30];
    l'erreur que vous m'expliquiez reviens la-bas aussi;

    Deuxième problème est: int form=2*n+i+2*(j-1) ;

    en transformant cette ligne en:
    Code:
    	BigInteger form = deux.multiply(n).add(BigInteger.valueOf(v).add(deux.multiply((j).subtract(new BigInteger("1")))));  //int form=2*n+i+2*(j-1) ;
    je ne sais pas si c'est bien transformé car c'est cette ligne qui doit être transformé: int form=2*n+i+2*(j-1) ;

    mais avec un peut de retouche il n y a plus d'erreur;

    voici le code global que je veux transformer: ça compile et ça exécute aussi;

    Code:
    package formulecorriger1;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    
    public class formulecorriger1 {
    	public static void main(String[] args) {
    		formulecorriger1  P1 = new formulecorriger1 ();
    	Scanner keby = new Scanner(System.in);
    
    	System.out.println("Veuillez saisir le rang inferieur n1 et superieur n2 :");
    	int s=keby.nextInt();
    	int m=keby.nextInt();
    	for (int x = s ; x <= m; x++) {
    
    	System.out.printf("P%d  : %d \n",+x, +P1.Formule3(x));
    
    	}
    	keby.close();
    	}
    	public int Formule3 (int n){
    		
    		int i;
    		int j;
    		int form;
    		int AV[] = {
    			    1,   6,   5,   4,   3,   2,
    			     1,   4,   3,   2,   1,  2,
    			     1,  4,  3,  2, 1, 2,
    			     1,  4, 3, 2,  1,  6,
    			     5,  4,  3,  2,  1, 2
    			};	
    		i=AV[(2*n)%30];
    		j=Div1(2*n+i);
    		form=2*n+i+2*(j-1) ;
    		
    		if (n<=2){
    			
    			return Formule2 (n);
    			
    		}else if (Div1(form)==1){
    		
    			return form;
    		
    	   }else{
    		   
    		     return Formule2 (n);	
    		
    	   }
    		
    	}
    	
    	public int Div1 (int n) {
    
    		int i =3;
    
    		/*long d=n-1 ;*/
    		double d=Math. sqrt(n) ;
    
    		int div=1;
    
    		if ((n) % (2)== 0) {
    			div=2;
    			
    		} else{
    
    		while ((i<=d) && ((n) % (i) != 0)) {
    
    		i =i+2 ;
    
    		}
    
    		if ((i<=d) &&(n) % (i) ==0) {
    		div = i ;
    
    		}
    
    		}
    
    		return div;
    		}
    	public int Formule2 (int n){
    
    		int p=0;	
    		loop1:	
    		for(int j=n;j<=2*n;j++) {
    		n=j;	
    		int i=0;
    		int r=0;
    		int control = 2 * n + 1 ;
    		int Q = Div1(2 * n + 1);
    		int b = Q;
    		int sortie = 0;
    		ArrayList<Integer> K= new ArrayList<Integer> ();
    		K.add(control);
    
    
    
    		while ((Q!=1) && (sortie == 0)) {
    
    		b = Q ;
    		control=2 * n + Q;
    		Q = Div1(2 * n + Q);
    		r=K.size();
    		while (i<r) {
    
    		if (control== K.get(i) ) {
    
    		sortie = sortie + 1;
    
    		}
    
    		i=i+1;
    		}
    
    
    		K.add(2 * n + Q);
    
    		}
    
    
    		if ((Q==1) && (sortie == 0) ){	
    
    		p=2 * n + b;  break loop1;
    
    
    
    		}
    
    		    }
    
    		return p;
    
    		}
    }
    Dernière modification par saniadaff ; 01/05/2022 à 13h26.

  9. #8
    polo974

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Citation Envoyé par Merlin95 Voir le message
    T'as oublié le principal nécessaire voir suffisant : où sont les messages d'erreurs ??
    Je crois qu'il a surtout oublié le fameux RTFM.

    Sans doute trop génial pour le lire... Et on voit le résultat.

    (Oui, j'assume)
    Jusqu'ici tout va bien...

  10. #9
    vgondr98

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Code:
    BigInteger n = new BigInteger("100");
    		
    int AV[] = {
    			    1,   6,   5,   4,   3,   2,
    			     1,   4,   3,   2,   1,  2,
    			     1,  4,  3,  2, 1, 2,
    			     1,  4, 3, 2,  1,  6,
    			     5,  4,  3,  2,  1, 2
    };
    		
    BigInteger deux = new BigInteger("2");
    		
    int indice = (deux.multiply(n)).mod(new BigInteger("30")).intValue();
    		
    BigInteger i = BigInteger.valueOf(AV[indice]);
    		
    System.out.println(i);
    Pour le coup, il est inutile de lire un quelconque manuel pour trouver cette solution, il faut juste réfléchir deux secondes et utiliser le raccourci Ctrl + espace pour voir les différentes méthodes qui s'appliquent à la classe BigInteger. Le plus dérangeant c'est le coup de vouloir récupérer un BigInteger d'un tableau de int.

  11. #10
    saniadaff

    Re : Java; problème sur mon tableau càd BigInteger avec le tableau

    Pour le coup, il est inutile de lire un quelconque manuel pour trouver cette solution, il faut juste réfléchir deux secondes et utiliser le raccourci Ctrl + espace pour voir les différentes méthodes qui s'appliquent à la classe BigInteger. Le plus dérangeant c'est le coup de vouloir récupérer un BigInteger d'un tableau de int.
    Merci!!!

    Voilà un vrai Pro;
    En un seul message le problème est résolu;

Discussions similaires

  1. tableau java
    Par youcashnicave dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 13/11/2016, 12h41
  2. Affichage de tableau - Java
    Par Lechero dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 04/01/2014, 19h24
  3. java tableau de short tcp
    Par invited08e1382 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 05/01/2012, 15h33
  4. Tableau en java
    Par Morghot dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 14/04/2011, 13h28
  5. Tableau en JAVA
    Par inviteb478b64d dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 20/04/2010, 14h56