Philosophie java [java] - Java - Programmation
Marsh Posté le 11-05-2004 à 11:29:23
tu peux aussi implementer Comparable sur les objet de ta collection ou de ton tableau
Marsh Posté le 11-05-2004 à 11:31:00
Giz a écrit : Bien j'ai un peu de mal a voir comment un programme java est qualifie de bien "structure". En clair je me trouve dans une situation un peu etrange : je desire trier simplement un tableau en passant en parametre a la fonction sort() le tableau et la fonction de comparaison. |
Bin le tri de ton bête tableau se base surement sur des bêtes critères mais faut bien les spécifier quelque part. Ce que tu spécifies c'est quelles sont les conditions pour qu'un objet soit "plus grand, plus petit ou égal" à un autre.
Tu veux écrire où ces critères sinon dans une classe? Ecrire une classe ne veut pas dire avoir un fichier .java avec rien que ce code là dedans (voir inner classes)
Marsh Posté le 11-05-2004 à 11:31:36
Tu as des méthodes statiques de tri dans la classe java.util.Arrays
Attention, quand même : il faudra que les objets dans ton tableau soient comparables.
Et sinon, ta classe reflète une chose pas si élémentaire : c'est un trieur. Et une chose, c'est un objet, aussi.
[Edit] grillaid par Darklord et the real --, la classe!
Marsh Posté le 11-05-2004 à 12:11:19
Pour un trieur sans état, tu peux faire une unique instance dans le système.
Dans ta classe à trier, tu mets un beau champ statique :
Code :
|
Ce qui a pour gros bénéfice de ne pas te polluer ni l'espace de nom avec une classe dont on a rien à foutre, ni la mémoire avec des instances inutiles.
Marsh Posté le 11-05-2004 à 12:51:31
OK merci tous !
Pour la fonction de trie, elle a pour prototype :
static <T> void sort(T[] a, Comparator<? super T> c)
J'ai regarde la doc mais j'ai un peu de mal a comprendre ce que veut dire Comparator<? super T> c
Une autre chose le type <T> signifie quoi exactement ? : il faut cree un iterateur ? (l'interface Iterator est marquee comme suit sur la doc : Interface Iterator<E> )
Jsuis un peu paume la
PS : j'ai l'impression de devoir ecrire 100 lignes de code pour cette foutue fct de comparaison
Marsh Posté le 11-05-2004 à 12:57:08
houla, tu regardes le truc en jdk1.5 ... t'es sûr de toi là ? pkoi tu restes pas en 1.4 pour le moment ?
Sinon, c'est la signature d'une méthode prototypée. Ca signifie que le comparator que tu passes en paramêtre doit être un comparator de classe égale ou supérieur (dans la hierarchie d'héritage) à la classe de ton tableau.
en gros, si tu lui passes un tableau d'Integer, il faut que le comparator soit un comparator d'Integer, de Number ou d'Object (je simplifie volontairement en ne parlant que d'héritage et pas d'implémentation).
Marsh Posté le 11-05-2004 à 13:08:03
saloperie de JDK 1.5 pas encore dispo pour mac
java 1.5 sapu !
Marsh Posté le 11-05-2004 à 13:09:46
bon OK !
je lis sur la console :
|
J'ai dc le sdk 1.1 : la doc n'est meme pas presente sur le site de Java (ca commence au 1.2)
Marsh Posté le 11-05-2004 à 13:12:12
ReplyMarsh Posté le 11-05-2004 à 13:22:27
Déjà, quand tu installes Linux, première chose à faire : désinstaller kafee, et installer le jdk.
Sinon, t'es pas dans la merde!
Là, si tu veux faire une analogie avec le C++, c'est un peu comme tu compilais avec Visual, tout en étant persuadé de faire du Borland, par exemple (je fais mon kéké, parce que y'a des mecs dans mon bureau qui se font des noeuds au cerveau avec ça. Moi, je les regarde, et je rigole.)
Marsh Posté le 11-05-2004 à 13:25:09
C'est pas possible...1.1 doit concerner autre chose
Bref, jsuis arriver a passer le probleme en utilisant la doc 1.4.2 ou le prototype est plus clair :
static void
sort(Object[] a, Comparator c)
Marsh Posté le 11-05-2004 à 13:31:40
non, mais au delà de ça....tu utilises une machine virtuelle qui s'appelle Kafee, et tu lis la doc associée à une machine virtuelle Sun....Donc, à moins d'une compatiblité à 100% entre la JVM Sun 1.4.x et la JVM Kaffee, tu cours vers les emmerdes à toute vitesse!!!!
Quand tu lances java --version, ça doit te répondre :
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
ou qqchse dans ce goût là.
Marsh Posté le 11-05-2004 à 13:35:22
gfive a écrit : Déjà, quand tu installes Linux, première chose à faire : désinstaller kafee |
en general il l'installe pas, en tout cas, pas par defaut
Marsh Posté le 11-05-2004 à 13:36:20
gfive a écrit : non, mais au delà de ça....tu utilises une machine virtuelle qui s'appelle Kafee, et tu lis la doc associée à une machine virtuelle Sun....Donc, à moins d'une compatiblité à 100% entre la JVM Sun 1.4.x et la JVM Kaffee, tu cours vers les emmerdes à toute vitesse!!!! |
t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!)
La seule diff c que c de l'open source
Marsh Posté le 11-05-2004 à 13:38:31
uriel a écrit : en general il l'installe pas, en tout cas, pas par defaut |
bah, je sais pas pkoi, moi, il me le met toujours! Ca doit être parce que je coche toutes les packages de dev à l'installation!
Marsh Posté le 11-05-2004 à 13:38:52
Giz a écrit : t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!) |
elle est de taille pour certaines personnes cette difference
Marsh Posté le 11-05-2004 à 13:39:06
uriel a écrit : en general il l'installe pas, en tout cas, pas par defaut |
exact, mais c t les package internet que j'avais (url sur des package Mandrake=>open source only=>kaffe).
Jverrais si ca me gonfle.
Mais mon programme n'est pas gros, c juste un truc a rajouter dans une librairie
Marsh Posté le 11-05-2004 à 13:40:00
Giz a écrit : t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), |
ben a ta place, je serais pas si optimiste, mais bon.
Marsh Posté le 11-05-2004 à 13:40:20
uriel a écrit : elle est de taille pour certaines personnes cette difference |
gcc est mieux que le compilo de visual
Marsh Posté le 11-05-2004 à 13:41:01
gfive a écrit : ben a ta place, je serais pas si optimiste, mais bon. |
+1 , demandez a -- ce qu'on a vu au FOSDEM sur les JVM open
Marsh Posté le 11-05-2004 à 13:41:30
gfive a écrit : bah, je sais pas pkoi, moi, il me le met toujours! Ca doit être parce que je coche toutes les packages de dev à l'installation! |
+1 c ce que j'ai fais
Marsh Posté le 11-05-2004 à 13:44:49
ReplyMarsh Posté le 11-05-2004 à 13:45:58
Giz a écrit : t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!) |
compatible avec la jdk1.1, pas la 1.4. lis tes messages.
Marsh Posté le 11-05-2004 à 14:33:52
ReplyMarsh Posté le 11-05-2004 à 14:36:29
oui mais pourquoi ? d'accord c'est pas aussi complet que le bazar de sun, mais sinon ?
Marsh Posté le 11-05-2004 à 14:40:22
ben on a un java pas complet et qui rame, c'est chiant.
Marsh Posté le 11-05-2004 à 14:54:56
Giz a écrit : t'a raison, mais je pense bien que c'est compatible a 100% (je l'espere), sinon ca servirait a quoi Kaffe (ils ne vont pas reecrire toute la doc!) |
Arrête de confondre pensée et certitude, ça sera déjà bien.
Marsh Posté le 11-05-2004 à 15:01:11
ReplyMarsh Posté le 11-05-2004 à 15:05:24
Et pis, il est mieux, peut être, mais si tu codes avec la doc Visual, et que tu compiles avec gcc, ça va pas tout le temps marcher, et c'est ça qui importe, dans ton cas.
Marsh Posté le 11-05-2004 à 15:48:01
logiquement l'API est standard => d'une JVM à l'autre ca doit passer.
Mais le problème là c'est la version de java. Dans le 13 post on voit clairement :
Citation : Engine: Just-in-time v3 Version: 1.1.2 Java Version: 1.1 |
donc, regarder la javadoc de l'API 1.5 ca risque de poser problème forcément ...
D'ailleur je suis étonné que ton truc compile vu que la classe Arrays est apparu à la version 1.2 de java ...
bref, si tu ne tiens pas à totu prix à avoir un truc full open source, installe la jdk1.42.
Marsh Posté le 11-05-2004 à 18:10:17
Un petit detail :
Soit une classe interne toto dans une autre classe :
public class parent
{
public class toto
{
public void sort (...)
}
toto[] ex = new toto[20];
ex.sort //compile pas
}
la ligne ex.sort ne compile pas car ex est un tableau.
les seuls 2 solutions sont bien :
-ex[0].sort(ex);//utliser la 1ere valeur par exmple pour l'appel
-toto bidon;//cree une variable bidon pour l'appel
bidon.sort(ex);
J'aurai voulu faire un truc du style toto.sort(ex) mais pour cela faut mettre la classe et la fonction en statique ce qui est refuse pour une classe interne par le compilo
Y'a-t-il mieux que les 2 solutions que j'ai propose ?
Marsh Posté le 11-05-2004 à 11:23:55
Bien j'ai un peu de mal a voir comment un programme java est qualifie de bien "structure". En clair je me trouve dans une situation un peu etrange : je desire trier simplement un tableau en passant en parametre a la fonction sort() le tableau et la fonction de comparaison.
Le probleme c'est que la fonction de comparaison est une interface. Pour implementer l'interface (Comparator), j'ai donc besoin de creer une classe avec le mot cle "implements" juste pour creer ma fonction de comparaison pour le trie du tableau.
Conclusion : je sais que java est fortement oriente objet, mais dans le cas d'un tri d'un pauvre tableau, suis-je vraiment oblige de creer une classe dans le but d'implementer l'interface ?
Je trouve ceci un peu etrange dans la mesure ou ma classe ne reflete nullement un objet mais une chose elementaire ; d'ou ma question