pb lors creation d'une classe generic en java pour type primitif

pb lors creation d'une classe generic en java pour type primitif - Java - Programmation

Marsh Posté le 20-03-2009 à 10:54:14    

lorsque je complile le fichier suivant il me donne le erreur suivante
 
 
public class TrieurNb<number N>
{
   private boolean croissant;
 
   /**
      cNnstruit un trieur de nombres
    */
   public TrieurNb(boolean croissant)
   {
      this.croissant=croissant;
   }
   
   
    public void tri(N[] tab,int debut, int fin)
    {
        construireTas(tab,debut,fin);
        deconstruireTas(tab,debut,fin);
    }
   
    private void construireTas(N[] tab,int debut, int fin)
    {        
        int j;
         
        for(int i=debut+1;i<fin;i++)
        {
            j=i;
            if(croissant==true)
            {
                while(j>=0 && pere(j)>=0 && tab[pere(j)].compareTo(tab[j])<0)
                {
                    echange(tab,pere(j),j);
                    j=pere(j);
                }
            }
            else
            {
                while(j>=0 && pere(j)>=0 &&  tab[pere(j)].compareTo(tab[j])>0)
                {
                    echange(tab,pere(j),j);
                    j=pere(j);
                }
            }
        }
         
    }
 
    private void deconstruireTas(N[] tab,int debut, int fin)
    {
        int j;
        int fils;
         
        for(int i=fin-1;i>debut;i--)
        {  
            j=debut;
            echange(tab,debut,i);
            if(croissant==true)
            {    
                 
                while(filsg(j) < i && tab[filsg(j)]<tab[j] || (filsd(j) < i && tab[filsd(j)]<tab[j]))
                {
                    fils=filsg(j);
                     
                    if((filsd(j) < i && tab[filsd(j)]<tab[j]) && filsd(j) < i)
                    {
                        fils=filsd(j);
                    }                    
                    echange(tab,fils,j);
                     
                    j=fils;                    
                }
            }
            else
            {
                while(filsg(j) < i && tab[filsg(j)]<tab[j] || (filsd(j) < i && tab[filsd(j)]<tab[j]))
                {
                    fils=filsg(j);
                     
                    if((filsd(j) < i && tab[filsd(j)]<tab[j]) && filsd(j) < i)
                    {
                        fils=filsd(j);
                    }                    
                    echange(tab,fils,j);
                     
                    j=fils;                    
                }
            }
        }    
    }
 
    private void echange(N[] tab,int indice1, int indice2)
    {
        if(indice1 != indice2)
        {
            N tmp;
            tmp = tab[indice1];
            tab[indice1] = tab[indice2];
            tab[indice2] = tmp;
        }
    }
 
   
   /**
        calcul l'indice Nu se trNuve le pere du fils passe en parametre
          @param i indice du fils
     */
    private int pere(int i)
    {
        return (i+1)/2 - 1;
    }
 
    /**
        calcul l'indice Nu se trNuve le fils gauche du pere passe en parametre
          @param i indice du pere
     */
    private int filsg(int i)
    {
        return (2*i)+1;
    }
 
    /**
        calcul l'indice Nu se trNuve le fils drNit du pere passe en parametre
          @param i indice du pere
          @return  
     */
    private int filsd(int i)
    {
        return 2*(i+1);
    }
     
     
    public static void main(String[] a)
    {
       TrieurNb<int> t =new TrieurNb<int> (true);
       int [] tab = {1, 23, 3 ,12, 12};
       t.tri(tab,0,tab.length);
       for(int i = 0 ; i<tab.length;i++)
       {
         System.out.print(tab[i]+"\t" );
       }
       System.out.println();
    }
     
}

 
 
javac  TrieurNb.javaTrieurNb.java:5: > expected
public class TrieurNb<number N>
                            ^
TrieurNb.java:5: illegal start of type
public class TrieurNb<number N>
                              ^
TrieurNb.java:5: <identifier> expected
public class TrieurNb<number N>
                               ^
TrieurNb.java:6: ';' expected
{
 ^
4 errors
 
 

Reply

Marsh Posté le 20-03-2009 à 10:54:14   

Reply

Marsh Posté le 20-03-2009 à 10:55:30    

c'est assez urgent c'est pour un projet

Reply

Marsh Posté le 20-03-2009 à 11:01:47    

excuse moi j'ai fait une erreur dans le code passer
voici le bon mais j'ai les même erreur
 
public class TrieurNb<N number>
{
   private boolean croissant;
 
   /**
      cNnstruit un trieur de nombres
    */
   public TrieurNb(boolean croissant)
   {
      this.croissant=croissant;
   }
   
   
    public void tri(N[] tab,int debut, int fin)
    {
        construireTas(tab,debut,fin);
        deconstruireTas(tab,debut,fin);
    }
   
    private void construireTas(N[] tab,int debut, int fin)
    {        
        int j;
         
        for(int i=debut+1;i<fin;i++)
        {
            j=i;
            if(croissant==true)
            {
                while(j>=0 && pere(j)>=0 && tab[pere(j)]<tab[j])
                {
                    echange(tab,pere(j),j);
                    j=pere(j);
                }
            }
            else
            {
                while(j>=0 && pere(j)>=0 && tab[pere(j)]<tab[j])
                {
                    echange(tab,pere(j),j);
                    j=pere(j);
                }
            }
        }
         
    }
 
    private void deconstruireTas(N[] tab,int debut, int fin)
    {
        int j;
        int fils;
         
        for(int i=fin-1;i>debut;i--)
        {  
            j=debut;
            echange(tab,debut,i);
            if(croissant==true)
            {    
                 
                while(filsg(j) < i && tab[filsg(j)]<tab[j] || (filsd(j) < i && tab[filsd(j)]<tab[j]))
                {
                    fils=filsg(j);
                     
                    if((filsd(j) < i && tab[filsd(j)]<tab[j]) && filsd(j) < i)
                    {
                        fils=filsd(j);
                    }                    
                    echange(tab,fils,j);
                     
                    j=fils;                    
                }
            }
            else
            {
                while(filsg(j) < i && tab[filsg(j)]<tab[j] || (filsd(j) < i && tab[filsd(j)]<tab[j]))
                {
                    fils=filsg(j);
                     
                    if((filsd(j) < i && tab[filsd(j)]<tab[j]) && filsd(j) < i)
                    {
                        fils=filsd(j);
                    }                    
                    echange(tab,fils,j);
                     
                    j=fils;                    
                }
            }
        }    
    }
 
    private void echange(N[] tab,int indice1, int indice2)
    {
        if(indice1 != indice2)
        {
            N tmp;
            tmp = tab[indice1];
            tab[indice1] = tab[indice2];
            tab[indice2] = tmp;
        }
    }
 
   
   /**
        calcul l'indice Nu se trNuve le pere du fils passe en parametre
          @param i indice du fils
     */
    private int pere(int i)
    {
        return (i+1)/2 - 1;
    }
 
    /**
        calcul l'indice Nu se trNuve le fils gauche du pere passe en parametre
          @param i indice du pere
     */
    private int filsg(int i)
    {
        return (2*i)+1;
    }
 
    /**
        calcul l'indice Nu se trNuve le fils drNit du pere passe en parametre
          @param i indice du pere
          @return  
     */
    private int filsd(int i)
    {
        return 2*(i+1);
    }
     
     
    public static void main(String[] a)
    {
       TrieurNb<int> t =new TrieurNb<int> (true);
       int [] tab = {1, 23, 3 ,12, 12};
       t.tri(tab,0,tab.length);
       for(int i = 0 ; i<tab.length;i++)
       {
         System.out.print(tab[i]+"\t" );
       }
       System.out.println();
    }
     
}

Reply

Marsh Posté le 20-03-2009 à 16:09:46    

C'est peut être plutôt quelque chose comme ça que tu veux faire:
  public class TrieurNb<N extends Number> {


---------------
Light is right
Reply

Marsh Posté le 20-03-2009 à 16:42:12    

Je valide la réponse de nerisson, apprendre la syntaxe de java, ça aide pour coder en java :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-03-2009 à 16:55:27    

ce que je cherche à faire c'est un trieur numérique génerique pour ne pas avoir un trieur par type primitif aider moi SVP


Message édité par croco57 le 20-03-2009 à 16:58:36
Reply

Marsh Posté le 20-03-2009 à 16:59:17    

nerisson a écrit :

C'est peut être plutôt quelque chose comme ça que tu veux faire:
  public class TrieurNb<N extends Number> {


ce que je cherche à faire c'est un trieur numérique génerique pour ne pas avoir un trieur par type primitif aider moi SVP

Reply

Marsh Posté le 23-03-2009 à 09:58:32    

Et quel est ton problème ?


---------------
Light is right
Reply

Marsh Posté le 23-03-2009 à 10:26:22    

croco57 a écrit :


ce que je cherche à faire c'est un trieur numérique génerique pour ne pas avoir un trieur par type primitif aider moi SVP

 

Les types génériques de java ne sont pas utilisables avec les types primitifs.

 

De plus ce que tu veux faire existe déja en fait :
Arrays.sort(int[])


Message édité par Bidem le 23-03-2009 à 10:29:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed