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);
}
}
A voir également:

2 réponses

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
Mimi
 
Merci bien tout d'abord :)
mais lorsque je fait l'affichage le tableau sera representé sans etre trié !!!
0
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
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
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
Mimi
 
merci en tt k :))
mais tjr ne marche pas !!!
0
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
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
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