Trie a insertion recursive en java [Résolu/Fermé]

Signaler
-
 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

Messages postés
71
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
18 juillet 2014
16
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);
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]);

}
}
Messages postés
16302
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 avril 2021
2 817
J'ai mis i<n, or tu as gardé i<=n, tu dois donc avoir un joli ArrayOutOfBoundsException...
merci en tt k :))
mais tjr ne marche pas !!!
Messages postés
16302
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 avril 2021
2 817
Une autre erreur et qui a priori permettrai de tout débugger. Dans ton while tu testes j>0 après avoir fait tab[j-1], or il faudrait le faire avant !

import java.util.Scanner;

public class TrieSimple 
{
    public static void triInsRec(int tab[], int n, int i)
    {
        if (i>0 && i<n)
        {
            int j=i;
            
            while (j>0 && tab[j]<tab[j-1])
            {
                int 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.print("Entrez la taille du tableau : ");
        int taille = sc.nextInt();
        int[] tab = new int[taille];
        
        for (int k=0; k<taille; k++)
        {
            System.out.printf("A l'emplacement %d du tableau nous avons : ",k);
            tab[k] = sc.nextInt();
        }
        
        triInsRec(tab, taille, 1);
        
        for (int k=0; k<taille; k++)
            System.out.printf("%d ",tab[k]);
    }
}
oui,c'est fais enfiiiiiiiiiiiin !!!
merciiiiiiiiiiiii
Messages postés
71
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
18 juillet 2014
16
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.
Messages postés
16302
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 avril 2021
2 817
"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.
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 !!!!!!!!!!!