Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur d’exécution du code

    10 avril 2022 à 18:34:28

    Bonsoir tout le monde;

    J'ai un code j'ava qui calcule ma formule sur les nombres premiers;

    l’accès au élément du tableau k me fait tourner en rond mais sans faire des commentaires, voici le code :

    package Premier;
    import java.util.*;
    
    public class Premier {
    	
    		
    			public static void main(String[] args) {
    				Premier P1 = new Premier(); 
    				@SuppressWarnings("resource")
    				Scanner keby = new Scanner(System.in);			    
    				int s=0;
    		        System.out.println("Veuillez saisir un rang n :");
    		        s=keby.nextInt();
    		        System.out.printf("P : %d \n", +P1.Formule2(s));
    		        
    		    }
    			
    			 public int Div1 (int n) {
    			
    			int i =2;
    			
    			int d=n-1 ;	
    			
    			int div=1;	
    			
    			 				
    			 while ((i<d) && ((n) % (i) != 0)) {
    				 
    				 				 
    				if ((n) % (i) ==0) {
    					
    				    div = i  ;			   
    				    
    				 }
    				
    				 i =i+1 ;
    				
    			}
    			 
    			 if ((n) % (i) ==0) {
    				    div = i  ;
    				    
    				   }
    			
    			return div;
    		}
    			 
    			public int Formule2 (int n){
    			
    			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 ;
    			    Q = Div1(2 * n + Q);
    			    control=2 * n + Q;
    			  
    			    r=K.size();
    			   
    			    while ((i<r) && (control != K.get(i) )) {	
    			     
    			    	i=i+1;
    			    }		    
    			    
    			    /*System.out.printf("element : %d \n", + K.get(i));*/
    			  
    			    if (control== K.get(i) ) {
    			   
    			    	sortie = sortie + 1;
    			                
    			       } else{
    			    	   K.add(2 * n + Q);
    			       }		  
    				 
    			}
    			
    			if ((Q!=1) && (sortie == 1) ){
    				
    				return 0;
    			}
    					 else {
    					 
    			return (2 * n + b);
    			}
    			}
    						
    
    

    voici le code d'erreur:

    Veuillez saisir un rang n :

    16

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

    at java.util.ArrayList.rangeCheck(Unknown Source)

    at java.util.ArrayList.get(Unknown Source)

    at Premier.Premier.Formule2(Premier.java:75)

    at Premier.Premier.main(Premier.java:14)

    il n’accède pas cette partie du code

     if (control== K.get(i) ) {

    Merci d'avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2022 à 3:06:02

      Je l'ai troué sur un autre forum:

      ma formule fonctionne bel et bien donc je viens de donner un nouveau souffle à la science.

      la troisième formule est vérifiée avec succès par des experts sur développez!

      https://www.developpez.net/forums/d2129842/general-developpement/algorithme-mathematiques/mathematiques/nombres-premiers/#post11832394

      package Premier;
      import java.util.*;
      
      public class Premier {
      	
      		
      			public static void main(String[] args) {
      				Premier P1 = new Premier(); 
      				@SuppressWarnings("resource")
      				Scanner keby = new Scanner(System.in);			    
      				long s=0;
      		        System.out.println("Veuillez saisir un rang n :");
      		        s=keby.nextInt();
      		        System.out.printf("P : %d \n", +P1.Formule2(s));
      		        
      		    }
      			
      			 public long Div1 (long n) {
      			
      				 long i =2;
      			
      				 long d=n-1 ;	
      			
      				 long div=1;	
      			
      			 				
      			 while ((i<d) && ((n) % (i) != 0)) {
      				 
      				 				 
      				if ((n) % (i) ==0) {
      					
      				    div = i  ;			   
      				    
      				 }
      				
      				 i =i+1 ;
      				
      			}
      			 
      			 if ((n) % (i) ==0) {
      				    div = i  ;
      				    
      				   }
      			
      			return div;
      		}
      			 
      			public long Formule2 (long n){
      								
      				int i=0;
      				long r=0;
      				long control = 2 * n + 1 ;	
      				long Q = Div1(2 * n + 1); 
      				long b = Q;
      				long sortie = 0;
      			ArrayList<Long> K= new ArrayList<Long> ();
      			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 == 1) ){
      				
      				return 0;
      		}
      					 else {
      					 
      		return (2 * n + b);
      			
      				      }
      		
      			
      		}						
      
      }



      • Partager sur Facebook
      • Partager sur Twitter

      Erreur d’exécution du code

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown