Trie a insertion recursive en java

Résolu
Mimi -  
 osmo -
Bonjour,
je suis debutante en Java
je n'arrive pas a trouver le probleme dans mon code !!
svp,aidez moi de trouver l'erreur !!!
merci d'avance
voile mon code :

import java.util.Scanner;
public class TrieSimple {
int tab[];
int n;
void TriInsRec(int tab[],int n,int i){
int x,j;
if((i>2)&&(i<=n))
{
j=i;
while((tab[j]<tab[j-1])&&(j>1))
{
x=tab[j];
tab[j]=tab[j-1];
tab[j-1]=x;
j--;
}
TriInsRec(tab,n,i+1);
}

}
public static void main(String args){
Scanner sc=new Scanner(System.in);
System.out.println("Entrez la taille du tableau:\n");
int taille= sc.nextInt();
int[]Tab = new int[taille];
for(int k=0;k<taille;k++)
{
System.out.println("A l'emplacement "+k+" du tableau

nous avons = ");
Tab[k]=sc.nextInt();
}

TriInsRec(Tab,taille,2);
}
}

2 réponses

  1. irmeche Messages postés 76 Statut Membre 17
     
    voila c corrigé:

    
    import java.util.Scanner;
    
    public class TrieSimple {
    	int tab[];
    	int n;
    
    	void TriInsRec(int tab[], int n, int i) {
    		int x, j;
    		if ((i > 2) && (i <= n)) {
    			j = i;
    			while ((tab[j] < tab[j - 1]) && (j > 1)) {
    				x = tab[j];
    				tab[j] = tab[j - 1];
    				tab[j - 1] = x;
    				j--;
    			}
    			TriInsRec(tab, n, i + 1);
    		}
    
    	}
    
    	public static void main(String [] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("Entrez la taille du tableau:\n");
    		int taille = sc.nextInt();
    		int[] Tab = new int[taille];
    		for (int k = 0; k < taille; k++) {
    			System.out.println("A l'emplacement " + k + " du tableau nous avons = ");
    			Tab[k] = sc.nextInt();
    		}
    
    		new TrieSimple().TriInsRec(Tab, taille, 2);
    	}
    }
    
    


    tu as fait deux erreurs:

    1- la méthode main s'ecrit
    public static void main(String [] args)

    et pas

    public static void main(String args)

    2- la methode main est static donc il faut crée un objet de type TrieSimple pour appeler la methode TriInsRec

    new TrieSimple().TriInsRec(Tab, taille, 2);
    0
    1. Mimi
       
      Merci bien tout d'abord :)
      mais lorsque je fait l'affichage le tableau sera representé sans etre trié !!!
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Pour l'erreur 2, il serait plus logique de rajouter le mot clé static à la méthode TriInsRec, plutôt que de créer un objet bidon pour l'appeler.

      Et si ton tableau est toujours trié à la fin c'est tout simplement parce que ta méthode de tri ne fonctionne pas, cela vient entre autre du fait que tu as une condition if (i>2), alors que ton premier appel tu le fais avec i=2... Cela fonctionnera un peu mieux si ta condition est : (i > 0) && (i < n), en appelant i=1 en premier, sauf pour le premier élément qui n'est pas trié, je te laisse regarder ça...
      0
    3. Mimi
       
      j'ai remplacer l'initialisation de i
      mais,tjr il y a d'erreur !!! :(
      import java.util.Scanner;

      public class TrieSimple {
      int tab[];
      int n;

      static void TriInsRec(int tab[], int n, int i) {
      int x, j;
      if ((i >0) && (i <= n)) {
      j = i;
      while ((tab[j] < tab[j - 1]) && (j > 1)) {
      x = tab[j];
      tab[j] = tab[j - 1];
      tab[j - 1] = x;
      j--;
      }
      TriInsRec(tab, n, i + 1);
      }
      }

      public static void main(String [] args) {
      int j=1;
      Scanner sc = new Scanner(System.in);
      System.out.println("Entrez la taille du tableau:\n");
      int taille = sc.nextInt();
      int[] Tab = new int[taille];
      for (int k = 0; k < taille; k++) {
      System.out.println("T["+k+"]=");
      Tab[k] = sc.nextInt();
      }

      TriInsRec(Tab, taille,j);
      for(int k=0;k<taille;k++)
      System.out.println("T["+k+"]="+Tab[k]);

      }
      }
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      J'ai mis i<n, or tu as gardé i<=n, tu dois donc avoir un joli ArrayOutOfBoundsException...
      0
    5. Mimi
       
      merci en tt k :))
      mais tjr ne marche pas !!!
      0
  2. irmeche Messages postés 76 Statut Membre 17
     
    une remarque pour l'utilisation des méthodes et vatiables static, c'est vrai que cet exemple est bidon mais il faut éviter au maximum l'utilisation des méthodes static, c'est dangereux.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      "il faut éviter au maximum l'utilisation des méthodes static, c'est dangereux"
      Tiens, en voilà une remarque étonnante ! Au contraire, c'est plus sûr d'utiliser une méthode static puisqu'elles sont indépendantes de l'état courant, il n'y a donc pas d'effet de bord.
      0
    2. osmo
       
      bonjour Mr KX, j'avais un problème avec le tri par sélection mais grâce à vous je viens de trouver la solution. Vraiment merci beaucoup pour le coup de main !!!!!!!!!!!
      0