Trie a insertion recursive en java

Résolu/Fermé
Mimi - Modifié par Mimi le 19/02/2012 à 09:02
 osmo - 10 mars 2014 à 16:33
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 71 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 18 juillet 2014 17
19 févr. 2012 à 11:23
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
Merci bien tout d'abord :)
mais lorsque je fait l'affichage le tableau sera representé sans etre trié !!!
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 19/02/2012 à 18:17
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
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
19 févr. 2012 à 18:38
J'ai mis i<n, or tu as gardé i<=n, tu dois donc avoir un joli ArrayOutOfBoundsException...
0
merci en tt k :))
mais tjr ne marche pas !!!
0
irmeche Messages postés 71 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 18 juillet 2014 17
19 févr. 2012 à 18:45
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
19 févr. 2012 à 18:49
"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
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