écraser des valeurs d'un tableau en java? [Fermé]

Signaler
-
 stéphanie -
Bonjour, je programme en java dumoins j'essaye...
Je voudrais savoir comment on fait pour écraser des valeurs d'un tableau par d'autres valeurs données.
La valeur des cases de mon tableau st calculées en fonction d'une vaiable x qi prend successivement les valeurs de 1 à 15.
Mon problème réside ds le fait que j'ai écrit un algo qui me permet de remplir les cases d'un tableau à 2 dimensions.Seuleument , pour certaine case du tableau, l'algo n'est plus juste dc il faut que j'écrase ces valeurs.J'ai dc pensé à un switch (x) en tappant directement la valeur juste , mais je n'arrive pas à afficher les valeur du switch!merci pour votre aide

10 réponses

Yop,

met ton code s'il te plait.

Merci

Nico
Bonjour, merci de m'avoir répondu, je t'envoie mon code, ce ke j'aimerai faire c pouvoir imprimer les valeurs du switch a la place des valeurs calculées ds la boucle , merci .
public class subtab
{ public static void main (String args[])
{
int x=24;
int s;
int i;
int j;
j=0;
int tab[][]=new int[3][20];


for(s=0;(s<=8)&&(x>0);++s){
for (i=(s+1)/2;i>0&&(x>0);i--){

tab[0][j]=s+1-i;
tab[1][j]=i-1;
tab[2][j]=Math.min(2*(2*(i-1)+1),x);

System.out.print (tab[0][j]+" ");
System.out.print (tab[1][j]+" ");
System.out.println (tab[2][j]);

x=x-2*(2*(i-1)+1);
x=x-Math.min(2*(2*(i-1)+1),x);

j++;
}}

switch (x){
case 7 : tab[2][5]=1;
tab[2][6]=5; break;
case 8 : tab[2][5]=1;
tab[2][6]=10; break;
case 10 : tab[2][8]=1;
tab[2][9]=4; break;
case 12 : tab[2][8]=1;
tab[2][9]=5; break;
}


}}
J'ai du mal à saisir ce que tu veux. Tu pourrais me donner un exemple de résultat avec les changements qu'il faudrait faire?
genre :
1 2 3 1 2 6
1 2 3 ==> 1 3 2
1 2 3 2 4 5

J'ai regardé un peu ton code. Tu fais un switch sur une valeur de x qui vaut soit 7, soit 8, soit 10, soit 12. Or dans tes boucles il ne vaut jamais ces valeurs. Alors je me demande si c'est réellement cette valeur que tu veux tester.

Nico
En fait,je me suis trompé en copiant le programme , g écrit x=24, mais c'est faux!
Ce que je voudrais faire , c'est :
pour une valeur d e x donnée (1 à 7) , remplir le tableau que g défini en utitlisant les boucles for.Seuleument, pour certaine valeur de x, il y a des cases du tableau qui vont changer (g tapé les cas particuliers ds le switch).Et donc mon but est que à l'affichage, les valeurs que g tapé manuellement ds le switch apparaissent à l'écran à la place de valeurs calculées par la boucle.
Je prends un exemple:
Sans le switch pour un x quelconque et non particulier g:
1 2 3
4 5 6
Et avec le switch j'aimerai parexemple remplacer le 5 par un 2:
1 2 3
4 2 6
C'est juste un problème de substitution.
Je te remercie de ton attention.
Juste un détail je pense. Si tu mets le switch dans ta boucle juste avant le j++, ca marche???
Ou sinon la seule solution que je vois est de faire une fonction qui reparcoure le tableau et en écrasant les valeurs si elles ne correspondent pas à tes critères.

++

Nico
J'avais déjà essayé de mettre le switch ds la boucle mai ça ne marchait pas , par contre je ne vois pas trés bien comment faire une fonction qui parcoure mon tableau est ce que tu pourrais me donner un exemple s'il te plait?
Merci pour ton aide
for (int i=0;i<3;i++) {
for (int j=0;j<20;j++) {
int val = tab[i][j];
switch(val) {

// ton code du swtich
}
}
}

Nico
je te remercie de m'avoir aidé , je vais essayer cette fonction et je te tiens au coarant! merci encore
Je viens d'essayer mais la boucle ne fait rien , j'ai fait comme tu m'as dit mais le résultat reste inchangé.Le programme compile bien mais a l'exécution il ne tient pas compte des exceptions.Je t'envois ce que j'ai fait :

public class Slaterfixe66
{
public static void main (String args[])
{
int Z=6;
int s;
int i;
int j;
j=0;
int tab[][]=new int[3][20];
for(s=0;(s<=8)&&(Z>0);++s){
for (i=(s+1)/2;i>0&&(Z>0);i--){

tab[0][j]=s+1-i;
tab[1][j]=i-1;
tab[2][j]=Math.min(2*(2*(i-1)+1),Z);

System.out.print (tab[0][j]+" ");
System.out.print (tab[1][j]+" ");
System.out.println (tab[2][j]);

Z=Z-2*(2*(i-1)+1);
Z=Z-Math.min(2*(2*(i-1)+1),Z);

j++;
}}
for ( i=0;i<3;i++){
for ( j=0;j<20;j++){
Z=tab[i][j];

switch (Z){
case 8 : tab[2][5]=1;
tab[2][6]=5; break;
case 9 : tab[2][5]=1;
tab[2][6]=10; break;
case 11 : tab[2][8]=1;
tab[2][9]=4; break;
}
}
}


}}
En fait je pensai plus à appeler cette boucle à la fin une fois que tu as rempli totalement ton tableau.

Nico
le tableau n'est pas toujours rempli, il posséde 20 lignes mais elles ne sont pas toujours remplies.Je vois pas ou est ce que je pourrais le mettre .peut être à la fin de ma méthode ? mais je ne comprends plus!
Excuse moi mais j'ai un peu de mal à comprendre. En fait je suis en train de faire plusieurs choses en meme temps :/
Je récapitule : tu remplis un tableau avec tes boucles for.
Dans ce tableau tu as des valeurs que tu ne veux pas et tu veux les remplacer.

Voila un algo que je te propose :
1) tu initialises tout ton tableau à -1
2) tu remplis ton tableau
3) tu vires les valeurs qui ne te vont pas tant que tu ne trouves pas de valeur négative dans ton tableau

Est-ce ca que tu veux???

Nico
Salut nico!
Je t'envoie le prog en entier pour que tu puisse te rendre compte par toi même des difficultés que je rencontre, car je pense ne pas avoir été claire.LA solution que tu m'as proposé ne convient pas au programme.
Merci d'avance et Merci pour tout ce ke tu as fait jusqu'à présent:

public class Stéphanie
{
public static void main (String args[])
{
int Z=24;
int s;
int i;
int j;
j=0;
int tab[][]=new int[3][20];

for(s=0;(s<=8)&&(Z>0);++s){
for (i=(s+1)/2;i>0&&(Z>0);i--){

tab[0][j]=s+1-i;
tab[1][j]=i-1;
tab[2][j]=Math.min(2*(2*(i-1)+1),Z);

System.out.print (tab[0][j]+" ");
System.out.print (tab[1][j]+" ");
System.out.println (tab[2][j]);

Z=Z-2*(2*(i-1)+1);
Z=Z-Math.min(2*(2*(i-1)+1),Z);

j++;
}}
for ( i=0;i<3;i++){
for ( j=0;j<20;j++){
Z=tab[i][j];

switch (Z){
case 24 : tab[2][5]=1;
tab[2][6]=5; break;
case 29 : tab[2][5]=1;
tab[2][6]=10; break;
case 41 : tab[2][8]=1;
tab[2][9]=4; break;
case 42 : tab[2][8]=1;
tab[2][9]=5; break;
case 44 : tab[2][8]=1;
tab[2][9]=7; break;
case 45 : tab[2][8]=1;
tab[2][9]=8; break;
case 46 : tab[2][8]=0;
tab[2][9]=10; break;
case 47 : tab[2][8]=1;
tab[2][9]=10; break;
case 57 : tab[0][12]=5;
tab[1][12]=3;
tab[2][12]=1;
tab[0][13]=5;
tab[1][13]=2;
tab[2][13]=1; break;
case 58 : tab[2][5]=1;
tab[2][5]=1; break;
case 64 : tab[0][10]=5;
tab[1][10]=2;
tab[2][10]=1;
tab[0][11]=6;
tab[1][11]=0;
tab[2][11]=2;
tab[0][12]=4;
tab[1][12]=3;
tab[2][12]=7; break;
case 78 : tab[2][11]=1;
tab[2][13]=9; break;
case 79 : tab[2][11]=1;
tab[2][13]=10; break;
case 89 : tab[0][16]=6;
tab[1][16]=2; break;
case 90 : tab[0][16]=6;
tab[1][16]=2;
tab[2][16]=2; break;
case 91 : tab[1][14]=2;
tab[2][14]=1;
tab[2][16]=2; break;
case 92 : tab[1][14]=2;
tab[2][14]=1;
tab[2][16]=3; break;
case 93 : tab[1][14]=2;
tab[2][14]=1;
tab[2][16]=4; break;
case 96 : tab[1][14]=2;
tab[2][14]=1;
tab[2][16]=7; break;}
}
}


}}

Mon problème réside ds le fait ke j'aimerai ke pour certaines valeurs de Z qui snt ds le switch, les valeurs calculées par ma boucle soient remplacées par celles du switch
J'ai une question qui peut sembler bizarre, mais es-tu sure que ton algo remplit les bonnes valeurs dans ton tableau? Parce que j'ai beau triturer dans tous les sens, je ne retrouve jamais dans ton tableau les valeurs que tu as dans le switch. C'est pour ca qu'il ne rentre pas dedans.

Nico
> Nico
J'essaierai à l'avenir d'être attentive, je vous remercie
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
28 > Nico
Cool que ca marche enfin :-)

Notre aide fut avec plaisir !

JSS
Messages postés
3745
Date d'inscription
jeudi 22 avril 2004
Statut
Contributeur
Dernière intervention
17 décembre 2004
28 > Nico
Bonjour ou Bonsoir,

Alors c'est bon ?

++

JSS
> Nico
Yop,

salut JSS. Ben aucune idée. Je n'ai pas eu de nouvelles hier. Je pense que le dernier programme marche, mais elle me dit qu'elle a un problème de formatage. Or je n'ai pas ce problème puisque je fais un println.

Nico
> Nico
salut JSS :-)

oue c'est une question que j'ai posée un plus haut mais qui est restée sans réponse. Tu dois tester la valeur de Z quand?
- avec la valeur du début comme le dit JSS?
- avec la dernière valeur de Z quand tu sors des boucles for?
- à chaque changement de Z dans la boucle?

Nico
ok je pense avoir mieux compris : en fait lorsque Z vaut une certaine valeur, tu vas remplir une case de ton tableau en choisissant le mini entre 2 valeurs et tu vas remplir une autre case de ton tableau via le switch. C'est ca?

Nico
Oui, tu remplis le tableau pour une certaine valeur de Z , tu prends celle que tu veux( entre 1 et 118).Donc quand tu tapes une valeur de Z, ton programme s'exécute et ton tableau se rempli normalement mais pas toujours complètement sauf pour les grandes valeurs de Z.
Il se trouve que pour quelque valeurs de Z, certaines cases du tableau obtenu ne sont plus juste.C'est pour cela que j'ai introduit un switch(Z) en écrivant les valeurs des cases que je souhaiterai avoir pour les Z particuliers.
Et mon problème était que je ne savais pas comment écraser les valeurs calculées dans la boucle par les valeurs contenu dans mon switch.
Merci pour ta patience
Voila une solution que je te propose :
- Tu crées un 2eme tableau identique en taille.
- tu initialises toutes les cases de ce tableau à -1
- tu fais ton traitement, sauf que dans le switch tu stockes dans le 2eme tableau
- une fois que tu as terminé ton traitement, tu parcoures le 2eme tableau en entier et pour chaque valeur différente de -1 tu mets à jour le 1er tableau.

Voila une solution qui me parait potable.

Nico
Merci beaucoup Nico j'essaye tout ça et je te tiens au courant.