Help je boucle !

Résolu
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -  
 le père -
Bonjour,
j'essaye de remplir un tableau d'entiers à deux dimensions aléatoirement, et je voudrais que chaque ligne ne contienne jamais le même entier.
Le problème est que mon programme boucle dans le while car ma variable aléatoire ne se remet jamais à jour...

Quelqu'un peut-il m'aider ???

Merci bien...

public static void remplir(){
Random r = new Random();
int x=r.nextInt(nbCol);
for (int i=0; i<nbLigne; i++){
for(int j=0; j<nbCol; j++){
while(appartient(tab[i], x)) {
x=r.nextInt(nbVilles);
}
tab[i][j] = x;
}
}
}

14 réponses

le père
 
Bonjour

x=r.nextInt(nbVilles); ou x=r.nextInt(nbCol); ??

De plus, je ne sais pas comment marche ta fonction appartient, mais as-tu fait ce qu'il faut pour qu'elle ne teste que les éléments déjà remplis de la ligne, et non pas la ligne tout entière ?
0
mulot
 
Bonjour,
A priori je déplacerais l'instruction tab[i][j] = x; après la parenthèse fermante qui suit pour que la boucle J soit prise en compte.
En espérant aider.
0
le père
 
Bonjour

sûrement pas. après l'accolade fermante qui suit, on est sorti de la boucle sur j et on va écrire en dehors du tableau
0
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   4
 
coucou

Pour mon père :
oui c'est bien x=r.nextInt(nbCol);, j'ai mal copié...
De plus, comme tu l'as fait remarquer je teste la ligne entièrement.
Mais le problème vient effectivement de ma fonction appartient(), qui renvoie toujours true, et je ne comprend pas pkoi :

public static boolean appartient(int tab[], int x) {
boolean b = false;
for(int i=0;i<tab.length;i++) {
if(tab[i] == x);
b = true;
}
return b;
}

Sinon j'ai une autre solution mais qui donne la même chose :

public static boolean appartient(int tab[], int x) {
for(int i=0;i<tab.length;i++) {
if(tab[i] == x);
return true;
}
return false;
}
0
le père
 
tu n'as plus qu'à montrer la fonction appartient...
0

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

Posez votre question
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   4
 
aide moi mon père ! :)
0
le père
 
je ne suis pas pro du java et je me méfie des tableaux à plusieurs dimensions dont on passe une colonne (ou une ligne) à une fonction. Ne peux-tu pas écrire le test d'appartenance directement dans la boucle de remplir?
0
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   4
 
si mais ça sera un peu moins propre...
Je vais faire comme ça et tester.
Si ça t'intéresse je te tiens au courant sur ce forum de mes résultats !

Merci ciao
0
le père
 
Merci, ce qui m'intéreserait surtout c'est de savoir pourquoi ça ne marche pas actuellement.
J'ai téléchargé java hier pour m'y mettre, alors j'espère comprendre bientôt

Salut
0
sebdechezmoi Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   5
 
Slt si c'est du java tu devrai eviter if(tab[i] == x); et utiliser les methode fournis par java tel que equals(), chatAt(), . . . qui sont bcp mieu.
Il se peut que ca vienne de la.
La doc fournie plein de methode pour la classe Array il devrai y en avoir une qui effectue le test que tu fait ici.
0
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   4
 
c'est gentil mais les méthodes que tu me donnes sont des méthodes qui s'appliquent aux chaînes de caractères (String) et pas trop trop aux tableaux si je ne m'abuse ;)
0
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   4
 
C'est bon j'ai débugué ma fonction appartient, en enlevant le ";" à la fin du if...
Et oui erreur de gros naze mais les gros nazes sont ceux qui l'ont pas remarqué !!! eheheh

Par contre le mystère reste entier sur remplir()...
0
le père
 
j'avoue me sentir concerné par ton histoire de nazisme...

ça ne marche toujours pas ? Note que telle qu'est écrite ta fonction appartient, elle doit avoir sérieusement tendance à refuser les 0 sauf en dernier élément d'une ligne
De plus, le premier nombre que tu essayes en début de ligne est toujours le dernier de la ligne précédente. Pas très aléatoire.
0
michaelknight00 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   4
 
Et oufffffff
Ca y est enfin...

Pour le père (qui etes aux cieux... lol) :
Merci pr tes conseils, j'ai rajouté un compteur pour que la fonction appartient ne teste que les éléments déjà remplis de la ligne, et non pas la ligne tout entière.
J'ai aussi rendu à 100% aléatoire ma fonction remplir ;)
Et enfin j'ai rajouté un cas d'arret au while pour quitter quand j'ai passé tous mes éléments en revue (c'est ca qui bouclait)

Allé a plus !!
0
le père
 
bisous à Kitt de ma part
0