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
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

A voir également:

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
"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)

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);
}
0
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
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
0
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
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)
0
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
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.
0
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
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 :

while (attendre());
0
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
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
0

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
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
0
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
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 :

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
0
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
très bien, je vais mettre résolu et je pourrais même mettre plus que résolu, franchement merci pour le cour
0