pb lors creation d'une classe generic en java pour type primitif - Java - Programmation
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();
}
}
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> {
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
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
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: |
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
Marsh Posté le 23-03-2009 à 09:58:32
Et quel est ton problème ?
Marsh Posté le 23-03-2009 à 10:26:22
croco57 a écrit :
|
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[])
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