Trie a insertion recursive en java

Résolu
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. 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. Merci bien tout d'abord :)
      mais lorsque je fait l'affichage le tableau sera representé sans etre trié !!!
      0
    2. Modérateur
      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. 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. Modérateur
      J'ai mis i<n, or tu as gardé i<=n, tu dois donc avoir un joli ArrayOutOfBoundsException...
      0
    5. merci en tt k :))
      mais tjr ne marche pas !!!
      0
  2. 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. Modérateur
      "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. 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