Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modifier élément d'un tableau par un indice variab

3 juillet 2015 à 22:36:01

Salut ! Je débute en Java et j'ai un soucis , voici mon code j'espère que vous pourrez m'aider sans trop entrer dans des détails techniques :

import java.lang.Math;
public class PirateRoad{
	public static void main(String[] args){
		byte tableau[][] = new byte[22][22];
		byte indiceTableau = 0;
		for(byte indicePrimitif = 0;indicePrimitif<22;indicePrimitif++){
			while(indiceTableau<22){
				System.out.print("Tableau "+indicePrimitif+" "+indiceTableau+"="indiceTableau);
				tableau[indiceTableau] = ++indiceTableau;
			}
		}
	}
}

Il semblerait que je ne puisse pas faire ceci :

tableau[indiceTableau] = ++indiceTableau;

 En effet j'obtient cette erreur :

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    Syntax error on token "indiceTableau", delete this token
    Type mismatch: cannot convert from byte to byte[]

    at PirateRoad.main(PirateRoad.java:8)

J'aimerai en connaître la raison s'il vous plaît , pourriez vous m'aider s'il vous plaît ?

-
Edité par PeterGunnTheme 3 juillet 2015 à 23:24:13

  • Partager sur Facebook
  • Partager sur Twitter
Si il existe un Dieu au sens religieux du terme , il est alors par essence de nature humaine , car il n'y a que la vanité d'un Homme qui ai pu le leurrer sur sa valeur au point de le placer au centre d'une création aussi vaste que l'est l'univers .
3 juillet 2015 à 23:06:06

Bonsoir,

en fait l'erreur, c'est que ce que tu as fait n'a aucun sens :p. Si tu pouvais m'expliquer ce que tu souhaites réaliser, je pourrais t'aider.

Cordialement,

Creart

  • Partager sur Facebook
  • Partager sur Twitter
4 juillet 2015 à 0:10:04

Salut !

C'est simple j'ai un tableau de type byte à deux dimensions chacune de 22 éléments .

Je veux remplir les 22 premières cases du premier tableau ainsi 0 , 1 , 2 , 3 , 4 ... Jusqu'à 21 puis à partir de l'indice 0 de la 2 éme dimension 22 , 23 , 24 , 25 ... .

  • Partager sur Facebook
  • Partager sur Twitter
Si il existe un Dieu au sens religieux du terme , il est alors par essence de nature humaine , car il n'y a que la vanité d'un Homme qui ai pu le leurrer sur sa valeur au point de le placer au centre d'une création aussi vaste que l'est l'univers .
4 juillet 2015 à 15:51:16

1° Les indices doivent des tableau sont des int et non des byte ( Meme si tu créer un tableau de type byte , String , .... )
2° N'oublie de remettre la variable indiceTableau a chaque itération de la boucle for

  • Partager sur Facebook
  • Partager sur Twitter
4 juillet 2015 à 16:09:14

GannoN a écrit:

1° Les indices doivent des tableau sont des int et non des byte ( Meme si tu créer un tableau de type byte , String , .... )
2° N'oublie de remettre la variable indiceTableau a chaque itération de la boucle for


Salut !

Merci pour ta réponse mais pourquoi les indices de mon tableau seraient forcément des int ? Ça gache de la RAM et si mon tableau a plus d'éléments que la valeur maximale d'un int diminuée de 1 ( puisque ça commence à 0 ) .

  • Partager sur Facebook
  • Partager sur Twitter
Si il existe un Dieu au sens religieux du terme , il est alors par essence de nature humaine , car il n'y a que la vanité d'un Homme qui ai pu le leurrer sur sa valeur au point de le placer au centre d'une création aussi vaste que l'est l'univers .
4 juillet 2015 à 16:41:16

Oula je ne croie pas que tu est a quelque octet prêt :D ( Surtout en java ou il y pas de gestion de mémoire, elle géré par le gc )

  • Partager sur Facebook
  • Partager sur Twitter
4 juillet 2015 à 21:38:44

Si tu veux remplir ce tableau de manière propre, il faut que tu ajoutes chaque valeur manuellement. Sinon tu peux créer une ArrayList  ou un HashSet, mais les entrées dans ces collections seront modifiables, or je ne sais pas à quel usage tu as besoin de ton tableau de byte x)
  • Partager sur Facebook
  • Partager sur Twitter
5 juillet 2015 à 0:25:10

Bonsoir,

si tu remplaces:

tableau[indicePrimitif][indiceTableau] = (byte) (++indiceTableau+indicePrimitif*21);


par:

tableau[indiceTableau] = ++indiceTableau;


Tu devrait obtenir quelque chose de fonctionnel (en pensant à remettre à 0 indiceTableau à chaque nouveau tour de la première boucle).

Ce code est... fonctionnel mais à vrai dire pas très propre, on préférera:

int width = 22, height = 22;
byte data[][] = new byte[width][height];
for(int y = 0; y < height; y++) {
   for(int x = 0; x < width; x++) {
      data[x][y] = (byte) (y*height+x);
      System.out.print(data[x][y] + " ");
   }
   System.out.println();
}

Le seul problème, c'est que si tu regarde la sortie, on passe en négatif à la ligne 6 et c'est logique (d'autant plus qu'on est en signé...), c'est à dire que la valeur maximale qu'un byte peut prendre est 127 (un byte est codé sur 8 bit, 2^8 combinaisons soit de -128 à +127).

Pour résoudre cela, il n'y a qu'une seule option, bosser avec des entiers!


  • Partager sur Facebook
  • Partager sur Twitter