A part pour les types primitifs, tout est passé par référence en Java. Je ne vois pas trop où tu veux en venir.
A part pour les types primitifs, tout est passé par référence en Java. Je ne vois pas trop où tu veux en venir.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int swap(int x, int y) { return x; } ... int a=10; int b=3; a=swap(b, b=a); System.out.println("a="+a); System.out.println("b="+b); .. a=3 b=10
ɹǝsn *sıɹɐlos*
Pas super intuitif, ni super élégant. Créer une fonction avec 2 paramètres juste pour qu'on puisse utiliser le second pour effectuer une affectation...
Non en fait, c'est pire que "pas super élégant". C'est super super moche.
S'il s'agissait d'un trait d'humour à la IOCCC alors ok mais si c'est réellement la seule façon de faire en Java ben moi je ne souscris pas...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Oui, bien sûr, c'était pour rire, d'où le ...
Cela dit, ça ne m'a jamais manqué de ne pas pouvoir swapper deux variables de cette façon.
ɹǝsn *sıɹɐlos*
Il y a des gens -- dont moi -- a qui ça ne manque pas de ne pas pouvoir assigner.
L'absence de certaines choses peut être plus ou moins facilement gérée quand on peut en tenir compte des la conception, et réellement handicapante quand le contexte est la traduction d'un programme qui les utilise. C'est le cas dans l'autre sens pour le GC.
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
J'ai été injuste avec le langage. C'est difficile de passer sur quelque chose de différent alors qu'on est à l'aise avec autre chose - surtout quand on pense connaître l'autre langage. Bon c'est pas quelque chose d'insurmontable, c'est sûr. Je ferai comme d'habitude quand ça me plait pas : le minimum.
PS : j'aime bien la fonction swap donné. Même si c'est "moche", l'idée est assez drôle - je ne connaissais pas (je trouve ça même intelligent) 8)
Merci pour vos réponses.
"Les spécialistes commencent par n'apprendre que ce qu'ils aiment et finissent par n'aimer que ce qu'ils ont appris." - Gilbert Cesbron
"Si nous avons chacun un objet et que nous les echangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées." - Proverbe Chinois.
Sur le principe un langage n'est qu'une traduction d'un algorithme.
En aucun cas, un langage quel qu'il soit doit être un frein pour concevoir ton code... Certes il y a toujours un temps d'adaptation et quelques subtilités, mais dans tous les cas l'objectif est le même: Résoudre une problématique!
Actuellement je regarde des tutoriels java, rien ne me choque, et comme dans tous langages, il y a avantages et inconvénients et on les connaît. La différence va être dans la réflexion suivante: Quand, pourquoi utiliser tel ou tel langage?
Ces difficultés, je les ai eu pour python, C, C++ et je les rencontre exactement de la même façon pour java...
Là où tu progresses sera dans ta façon d'exprimer une solution à un problème, c'est l'exercice le plus complexe: La conception
Bref quand on demande de faire un travail, l'objectif va bien plus loin que d'apprendre un simple langage de programmation
Bonne continuation...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
En Java ils appellent ça "référence", mais ce sont des références d'objet sur le tas. Le problème est que le vocabulaire est trop limité (il manque un mot) résultat différentes plate-formes (ou différentes personnes) utilisent différents termes comme "référence", "pointeur managé", "handle" (j'ai vu ces trois termes utilisés pour les objets .Net).
Mais ce type qui n'a pas de nom unique n'a pas grand-chose à voir avec le vrai passage de paramètre par référence. On voit bien cette distinction dans des langages comme C# et VB6/VB.Net.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Le code source en C comme il était
Je vous mettrai celui de Java quand j'aurai fini, mais je gérerai moins de choses.
J'avais pas encore fait d'interfaces pour afficher l'arbre- mais j'en avais l'intention en C - en java j'en vois pas l'intérêt si c'est pour utiliser 2-3 outils, méthodes que je ne comprends pas.
"Les spécialistes commencent par n'apprendre que ce qu'ils aiment et finissent par n'aimer que ce qu'ils ont appris." - Gilbert Cesbron
"Si nous avons chacun un objet et que nous les echangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées." - Proverbe Chinois.
Ce que j'aime pas.
Ne marche pas car type boolean
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int da; int db; ... int diff = (da > db) - (da < db);
Donc
Faut en plus que je rajoute les parenthèses sinon ça marche pas.
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int da; int db; ... int diff = ((da > db)?1:0) - ((da < db)?1:0);
Autre chose avec les mêmes variables:
Ne veux pas car attends un boolean...
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part if (diff)
J'aime pas non plus qu'il n'y ait pas de unsigned.
"Les spécialistes commencent par n'apprendre que ce qu'ils aiment et finissent par n'aimer que ce qu'ils ont appris." - Gilbert Cesbron
"Si nous avons chacun un objet et que nous les echangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées." - Proverbe Chinois.
Je pensais comme toi au début mais en fait, j'ai fini par me rendre compte que c'était un avantage de Java, et non l'inverse: On cagne en compréhensibilité et lisibilité.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Mais niveau donné, ça me parait plus logique que quelque chose de faux ou de NULL valent 0 et le reste est vrai. Ça permet de stocker les valeurs dans des entiers par exemple. Le résultat est plus proche de la machine, et c'est plus facile à manier - car plus proche de la réalité niveau machine (cette différence entre bas et haut niveau).
"Les spécialistes commencent par n'apprendre que ce qu'ils aiment et finissent par n'aimer que ce qu'ils ont appris." - Gilbert Cesbron
"Si nous avons chacun un objet et que nous les echangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées." - Proverbe Chinois.
Sauf que "vrai" n'est égal à 1 que par convention du C. Dans pratiquement toutes les formes de BASIC par exemple, "vrai" est égal à -1 (complément à 2), car "tous les bits à 1" est l'opposé de "tous les bits à zéro".
Et un processeur Motorola 68000 possède une instruction qui règle un registre à 255 (ou (char)-1)si la condition est vraie.
NOT ZERO est donc plus proche de la machine que 1.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
"Les spécialistes commencent par n'apprendre que ce qu'ils aiment et finissent par n'aimer que ce qu'ils ont appris." - Gilbert Cesbron
"Si nous avons chacun un objet et que nous les echangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées." - Proverbe Chinois.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Faire:
ne va pas produire un problème?
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Liste_TNoeud { public TNoeud noeud; public Liste_TNoeud suivant; public Liste_TNoeud() { this.noeud = new TNoeud(); this.suivant = new Liste_TNoeud(); } }
Car ça initialise le suivant, qui lui initialise son suivant, qui lui aussi initialise son suivant ...
"Les spécialistes commencent par n'apprendre que ce qu'ils aiment et finissent par n'aimer que ce qu'ils ont appris." - Gilbert Cesbron
"Si nous avons chacun un objet et que nous les echangeons, nous avons chacun un objet. Si nous avons chacun une idée et que nous les échangeons, nous avons chacun deux idées." - Proverbe Chinois.
Sauf que la réalité de la machine n'est pas franchement proche de la réalité humaine. Si on a inventé les langage de haut niveau, c'est justement pour se détacher de la machine car il est communément admis qu'il est plus simple de penser en tant qu'humain qu'en tant que machine.Le résultat est plus proche de la machine, et c'est plus facile à manier - car plus proche de la réalité niveau machine
Je vais être honnête, j'ai du mal à comprendre ce que tu veux faire avec cette ligne :
Je présume que tu cherches à renvoyer -1, 0 ou 1 selon si da est plus petit, égal ou plus grand que db. C'est bien ça ?int diff = (da > db) - (da < db);
Ici, tu te bases sur le fait qu'un test renvoie 0 ou 1 en particulier (et pas d'autres nombres et même pas un booléen) en C pour pouvoir faire des calculs qui te donneront une valeur représentant la différence. Déjà, moi je me dis : je fais un test logique, je veux un résultat logique (donc un booléen, VRAI ou FAUX). Pas un nombre que je vais utiliser pour faire un calcul. Tu me diras qu'en algèbre de Bool, on utilise souvent 0 et 1 mais on ne fait pas d'arithmétique ensuite dessus. Après, chacun sa vision des choses, mais je trouve ce genre de code beaucoup plus compréhensible avec des IF / ELSE IF / ELSE et 1 affectation par cas.
Pour ce qui est des unsigned, ça me perturbe encore des fois. Mais bon, on s'y fait ^^
Pourquoi recoder des listes plutôt que d'utiliser les types de Java ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager