Tableaux en java
Résolu/Fermé
abdali
Messages postés
161
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
30 août 2012
-
26 août 2012 à 22:09
abdali Messages postés 161 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 30 août 2012 - 30 août 2012 à 00:21
abdali Messages postés 161 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 30 août 2012 - 30 août 2012 à 00:21
A voir également:
- Tableaux en java
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Tableaux croisés dynamiques - Guide
- A java exception has occurred ✓ - Forum Minecraft
5 réponses
KX
Messages postés
16741
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mai 2024
3 016
27 août 2012 à 03:08
27 août 2012 à 03:08
"utiliser les caractères comme s'ils étaient des nombres", les String paraissent alors plutôt inadaptés, il vaudrait mieux mettre des caractères et des chiffres dans les tableaux (attention : les caractères s'écrivent entre apostrophes)
Remarque : si ton test avait été une égalité "si x==5 alors y=c", on aurait pu utiliser une Map<Integer,Character> pour indexer chaque caractère.
Object[][] tableau ={{'a','b','c','d','e'},{1,3,5,7,9}};Ensuite, pour ton test, il faut faire ça manuellement avec une petite boucle (je suppose que le tableau d'entiers est trié par ordre croissant).
public static void main(String...args) { Object[][] tableau ={{'a','b','c','d','e'},{1,3,5,7,9}}; int x=5; char y=0; for (int i=0; i<tableau[1].length; i++) if (x >= (int) tableau[1][i]) y = (char) tableau[0][i]; System.out.printf("x>=%d y='%c'\n",x,y); }
Remarque : si ton test avait été une égalité "si x==5 alors y=c", on aurait pu utiliser une Map<Integer,Character> pour indexer chaque caractère.
public static void main(String...args) { Map<Integer,Character> map = new TreeMap<Integer,Character>(); map.put(1, 'a'); map.put(3, 'b'); map.put(5, 'c'); map.put(7, 'd'); map.put(9, 'e'); int x = 5; char y = map.get(x); System.out.printf("x==%d y='%c'\n",x,y); }
abdali
Messages postés
161
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
30 août 2012
8
27 août 2012 à 03:40
27 août 2012 à 03:40
Merci pour la réponse elle m'a appris deux choses
d'abord la solution à mon problème.
Et si je te suis bien on peut déclarer un tableau avec des entiers et des string c'est ce que je cherchais, je pensais que ce n'était pas possible.
Encore une fois merci
d'abord la solution à mon problème.
Et si je te suis bien on peut déclarer un tableau avec des entiers et des string c'est ce que je cherchais, je pensais que ce n'était pas possible.
Encore une fois merci
KX
Messages postés
16741
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mai 2024
3 016
27 août 2012 à 04:08
27 août 2012 à 04:08
En fait ce ne sont pas des entiers et des String, mais des entiers et des caractères !
(Les String sont entre guillemets et les caractères entre apostrophes)
On peut déclarer un tableau avec des types différents grâce au polymorphisme puisque toutes les classes héritent de la classe Object, ainsi on fait un tableau d'Object et on met dedans tout ce que l'on veut.
Cependant, on perd de l'information, car on ne sait plus si l'Object en question est un entier, un caractère ou autre chose. C'est pour ça qu'il faut explicitement mettre les cast (int) et (char) comme je l'ai fait, pour redonner au programme l'information que l'on a perdu en passant aux Object.
Autre chose qui est cachée, c'est que ce n'est pas int et char qui héritent de Object, mais leurs classes enveloppes Integer et Character (la conversion est automatique). Ce qui signifie que dans le tableau d'Object je n'ai pas des int mais des Integer, et je n'ai pas des char mais des Character.
Le principal avantage est de pouvoir utiliser leur hiérarchie de classe, et leurs méthodes spécifiques, et le principal inconvénient c'est la consommation en mémoire, puisque les Object sont plus gros (22 octets pour Integer et Character, contre 2 octets pour char, et 4 pour int)
(Les String sont entre guillemets et les caractères entre apostrophes)
On peut déclarer un tableau avec des types différents grâce au polymorphisme puisque toutes les classes héritent de la classe Object, ainsi on fait un tableau d'Object et on met dedans tout ce que l'on veut.
Cependant, on perd de l'information, car on ne sait plus si l'Object en question est un entier, un caractère ou autre chose. C'est pour ça qu'il faut explicitement mettre les cast (int) et (char) comme je l'ai fait, pour redonner au programme l'information que l'on a perdu en passant aux Object.
Autre chose qui est cachée, c'est que ce n'est pas int et char qui héritent de Object, mais leurs classes enveloppes Integer et Character (la conversion est automatique). Ce qui signifie que dans le tableau d'Object je n'ai pas des int mais des Integer, et je n'ai pas des char mais des Character.
Le principal avantage est de pouvoir utiliser leur hiérarchie de classe, et leurs méthodes spécifiques, et le principal inconvénient c'est la consommation en mémoire, puisque les Object sont plus gros (22 octets pour Integer et Character, contre 2 octets pour char, et 4 pour int)
abdali
Messages postés
161
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
30 août 2012
8
27 août 2012 à 16:15
27 août 2012 à 16:15
Merci pour les précisions, j'ai appris beaucoup d'autre chose
mais peut on aussi déclarer des string avec des entiers, par exemple au lieu des lettres a,b,c on aurait des phrases? Le but est de simuler un tableau d'une base de données dans notre programme.
Autre question pour le code
for (int i=0; i<tableau[1].length; i++)
if (x >= (int) tableau[1][i])
y = (char) tableau[0][i];
ne manque t'il pas des scopes '{} apres le for et le if?
merci beaucoup encore une fois.
mais peut on aussi déclarer des string avec des entiers, par exemple au lieu des lettres a,b,c on aurait des phrases? Le but est de simuler un tableau d'une base de données dans notre programme.
Autre question pour le code
for (int i=0; i<tableau[1].length; i++)
if (x >= (int) tableau[1][i])
y = (char) tableau[0][i];
ne manque t'il pas des scopes '{} apres le for et le if?
merci beaucoup encore une fois.
KX
Messages postés
16741
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mai 2024
3 016
27 août 2012 à 18:40
27 août 2012 à 18:40
On peut déclarer des String avec n'importe quel caractère Unicode dedans, dont des entiers, mais dans ce cas je ne vois plus le trop le rapport avec ton code de tout à l'heure... En tout cas on ne pourras pas faire de comparaison >= directement sur des String, il faudra parser les String en int, avec Integer.parseInt(String).
Les accolades { } ne sont pas obligatoires lorsqu'il y a une seule instruction à exécuter comme c'était le cas dans mon code plus haut. On peut également ne pas avoir d'instructions du tout, et ainsi terminer directement la boucle ou la condition par un point-virgule, ce qui arrive lorsque le code à exécuter renvoie directement le booléen à tester. Exemple :
Les accolades { } ne sont pas obligatoires lorsqu'il y a une seule instruction à exécuter comme c'était le cas dans mon code plus haut. On peut également ne pas avoir d'instructions du tout, et ainsi terminer directement la boucle ou la condition par un point-virgule, ce qui arrive lorsque le code à exécuter renvoie directement le booléen à tester. Exemple :
while (attendre());
abdali
Messages postés
161
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
30 août 2012
8
28 août 2012 à 04:41
28 août 2012 à 04:41
En fait pour faire simple j'ai mis qu'un seul caractere mais dans mon cas J'ai par exemple des mots qui s'affichent dans le cas ou l'on saisit par exemple un chiffre superieur a 25 et un autre mot si le chiffre est inferieur a 25 et apres je dois enregistrer tous cela. c'est pour cette raison que J'ai posé la question si on pouvait mettre des nombres et etring dans un même tableau.
Tes réponses sont instructive, J'ai beaucoup appris.
Merci
Tes réponses sont instructive, J'ai beaucoup appris.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
abdali
Messages postés
161
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
30 août 2012
8
28 août 2012 à 04:52
28 août 2012 à 04:52
Une autre question
dans ton code :
for (int i=0; i<tableau[1].length; i++)
if (x >= (int) tableau[1][i])
y = (char) tableau[0][i]; // ne serait ce pas (char) tableau[i][1] pourquoi tu as utilisé cette notation.
Le tableau que j'ai est ainsi fait
Object[][] tableau ={{'faible','faible','faible','moyen','moyen','moyen','fort','fort','fort'},{1,2,3,4,5,6,7,8,9}};
si valeur< =3 faible
sinon si <=6 moyen
etc.
Merci
dans ton code :
for (int i=0; i<tableau[1].length; i++)
if (x >= (int) tableau[1][i])
y = (char) tableau[0][i]; // ne serait ce pas (char) tableau[i][1] pourquoi tu as utilisé cette notation.
Le tableau que j'ai est ainsi fait
Object[][] tableau ={{'faible','faible','faible','moyen','moyen','moyen','fort','fort','fort'},{1,2,3,4,5,6,7,8,9}};
si valeur< =3 faible
sinon si <=6 moyen
etc.
Merci
KX
Messages postés
16741
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mai 2024
3 016
28 août 2012 à 07:58
28 août 2012 à 07:58
Il faut que tu testes le code au fur et à mesure !
Les Strings sont entre guillemets, tu n'auras donc pas 'faible', mais "faible" etc.
De plus tableau[i][1] va forcément planter avec i>1 car c'est bien tableau[0][i] qu'il faut mettre, même si maintenant le cast doit être (String) et non plus (char), en effet tableau[0]={"faible","faible","faible"...}
Cependant l'intérêt de ton double tableau est nul, ça te complique la vie plus qu'autre chose, il vaudrait mieux avoir deux tableaux distincts, un de chaque type, ce qui évite de manipuler les casts et les enveloppeurs :
Cependant, cela ne sert à rien de faire un tel code si c'est pour mettre toutes les valeurs dans le tableau et pour doubler les attributs, ces deux tableaux donneront exactement les même résultats
Comprendre :
Les Strings sont entre guillemets, tu n'auras donc pas 'faible', mais "faible" etc.
De plus tableau[i][1] va forcément planter avec i>1 car c'est bien tableau[0][i] qu'il faut mettre, même si maintenant le cast doit être (String) et non plus (char), en effet tableau[0]={"faible","faible","faible"...}
Cependant l'intérêt de ton double tableau est nul, ça te complique la vie plus qu'autre chose, il vaudrait mieux avoir deux tableaux distincts, un de chaque type, ce qui évite de manipuler les casts et les enveloppeurs :
String[] attributs = {"faible","faible","faible","moyen","moyen","moyen","fort","fort","fort"}; int[] valeurs = {1,2,3,4,5,6,7,8,9}; int x=5; String y=null; for (int i=0; i<valeurs.length; i++) if (x >= valeurs[i]) y = attributs[i];
Cependant, cela ne sert à rien de faire un tel code si c'est pour mettre toutes les valeurs dans le tableau et pour doubler les attributs, ces deux tableaux donneront exactement les même résultats
String[] attributs = {"faible","moyen","fort"}; int[] valeurs = {1,4,7};
Comprendre :
si x>=7 alors y="fort" sinon si x>=4 alors y="moyen" sinon si x>=1 alors y="faible" sinon y=null
abdali
Messages postés
161
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
30 août 2012
8
30 août 2012 à 00:21
30 août 2012 à 00:21
très bien, je vais mettre résolu et je pourrais même mettre plus que résolu, franchement merci pour le cour