écraser des valeurs d'un tableau en java?

Fermé
stéphanie - 10 mai 2004 à 15:05
 stéphanie - 14 mai 2004 à 13:00
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
A voir également:

10 réponses

Yop,

met ton code s'il te plait.

Merci

Nico
0
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;
}


}}
0
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
0
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.
0
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
0
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
0
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
0
je te remercie de m'avoir aidé , je vais essayer cette fonction et je te tiens au coarant! merci encore
0
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;
}
}
}


}}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

Nico
0
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!
0
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
0
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
0
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
0
En fait les valeurs qu'il y a dans le switch ce sont des valeurs "forçées".Si tu change la valeur du Z tu vas voir les tableau continuera à se remplir jusqu'à une certaine valeur de Z=118.Les valeurs qui figurent ds le switch sont les valeurs de certaines cases du tableau qui doivent écraser les valeurs calculées par la boucle quelque lignes plu haut
0
JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004 32
11 mai 2004 à 10:49
Bonjour ou Bonsoir,

Je me permet de m'incruster dans la discussion.
En fait j'aimerai te proposer deux idées :

* la premiere un peu barbare : si tu connais les valeurs de ton tableau pourquoi ne pas les creer en creant 3 vecteurs avec les valeurs contenues ?

* la seconde un peu mieu :
Dans ton switch si tu cherches à écraser des valeurs comme tu dis pourquoi ne pas faire :
1 ta boucle d'initialisation de tes valeurs.
2 reaffecter els valeurs que tu veux sans faire de switch.
tab[1][2] = la valeur que je veux
tab[2][3] = la valeur que je veux
et je modifie ce que je veux.

voili voilou.

J'ai peut etre pas tout tres bien compris mais je te propose quand meme des idées.

++

JSS
0
stéphanie > JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004
11 mai 2004 à 11:07
Je te remercie popur ton aide, je vais essayer voir ce que je peux faire , en tout cas merci beaucoup.
0
JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004 32
11 mai 2004 à 11:38
Bonjour ou Bonsoir,

Beh en fait je comprends pas trop. Qu'est ce qui ne marche pas dans ta solution ?

Une petite question, tu veux faire tes changements de valeur en fonction de la valeur initiale de Z?

je reponds moi-meme
Apparement non dans le code :
for ( i=0;i<3;i++){
for ( j=0;j<20;j++){
Z=tab[i][j];

Mais c'est juste pour etre bien sur !

Voila je comprends pas trop le probleme.

bon courage

JSS
0
stéphanie > JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004
11 mai 2004 à 11:49
En fait le pb, c'estde faire afficher ce qu'il y a ds mon switch à la place de ce ki est calculé par ma boucle pour certaines valeurs de Z .
0
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
0
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
0
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
0
Merci beaucoup Nico j'essaye tout ça et je te tiens au courant.
0