Tableaux en java
Résolu
abdali
Messages postés
161
Date d'inscription
Statut
Membre
Dernière intervention
-
abdali Messages postés 161 Date d'inscription Statut Membre Dernière intervention -
abdali Messages postés 161 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Peut on déclarer un tableau à 2 dimension en string comme suit :
String tableau[][] = { {a,b,c,d,e},{1,3,5,7,9} };
ensuite peut en faire un test comme suit
si x>=5 alors y = c
c'est a dire utiliser les caractères comme s'ils étaient des nombres .
Merci
Peut on déclarer un tableau à 2 dimension en string comme suit :
String tableau[][] = { {a,b,c,d,e},{1,3,5,7,9} };
ensuite peut en faire un test comme suit
si x>=5 alors y = c
c'est a dire utiliser les caractères comme s'ils étaient des nombres .
Merci
A voir également:
- Tableaux en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
5 réponses
"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); }
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
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)
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.
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());
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
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
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