Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 17h13   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
Par défaut Problème boucle tableau

Bonsoir,
Je debute en Java et voila mon code;
Je genere donc un nombre aléatoirement, que je souhaite comparer à un tableau de valeur. Mais mon boolean me retourne tout le temps la meme valeur(false)
Je sais que je pourrais utiliser "%2" mais je prefere cette methode puisqu'elle est utilisés plusieurs fois pour qualifier le nombre(paire, rouge)...Je me comprend...
Pour ce qui du boolean je l'ai declaré dans les attributs et initialisé à faux.
Quelqu'un peut m'aider?
Images attachées
Type de fichier : png Capture d’écran 2012-01-25 à 16.41.31.png (18,2 Ko, 12 affichages)
Bissmark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h21   #2
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 099
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 099
Points : 7 025
Points : 7 025
Remarque préliminaire #1 : pour montrer ton code, fais un simple copier/coller et entoure-le de la balise [CODE]. N'attache pas d'image, ça sert à autre chose.

Remarque préliminaire #2 : cet extrait de code n'est pas suffisant. On ne va pas deviner ce que sont toutes ces variables. Il pourrait y avoir un problème de ce côté-là.

Concernant ton problème, tu devrais peut-être arrêter la boucle une fois que tu as trouvé un nombre qui te convient. En l'état, ta boucle parcourt absolument tout le tableau, sans s'arrêter avant la fin, et ne garde que le tout dernier résultat.
thelvin est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h25   #3
Modérateur
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 16 199
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 16 199
Points : 25 348
Points : 25 348
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Il faut penser à arrêter la boucle quand tu as trouvé ton nombre dans le tableau.

PS: pourquoi se casser la tête à faire un printscreen, à le découper et à l'attacher plutot que de copier / coller ton code directement sur le forum. En plus, ce n'est pas pratique à lire /tester / corriger.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
"Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973)
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h27   #4
Invité de passage
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
Voici le reste;
Pour ce qui est d'arrêter la boucle j'ai essayé avec un break mais n'y suis pas parvenu!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected boolean nombreEstPair=false;
protected int[]pair=new int[]{2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36};
public int tirage(){
		Random r=new Random();
		int nombre=r.nextInt(37);
	//permet d'obtenir un nombre pseudo-aléatoire compris entre 0(inclus) et 37(exclus)
		return nombre;
	}
 
public boolean estPair(){
		for (int i=0;i<this.pair.length;i++){
			if (this.nombre==pair[i]){
				this.nombreEstPair=true;
			}else{this.nombreEstPair=false;
			}	
		}return nombreEstPair;	
	}
Bissmark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h58   #5
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 099
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 099
Points : 7 025
Points : 7 025
Citation:
Envoyé par Bissmark Voir le message
Pour ce qui est d'arrêter la boucle j'ai essayé avec un break mais n'y suis pas parvenu!
Mais encore ? Tu aurais peut-être pu nous montrer ?

Fin bon, exemple d'utilisation :

Code :
1
2
3
4
5
6
7
for(int i = 0; i < nombreDIterations(); i++) {
  faireDesTrucs(i);
  if(ilEstTempsDeSArreter(i)) {
    break;
  }
  faireDAutresTrucsSiOnVeut(i);
}
Sinon, vu que c'est dans une méthode qui contient juste cette boucle, on peut en sortir avec un return :

Code :
1
2
3
4
5
6
7
8
9
boolean verifierUnTruc() {
  for(int i = 0; i < nombreDIterations(); i++) {
    int calcul = calculerPourCetteIteration(i);
    if(leCalculVerifieBien(calcul)) {
      return true;
    }
  }
  return false;
}
thelvin est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 00h56   #6
Invité de passage
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
Citation:
Envoyé par thelvin Voir le message
Mais encore ? Tu aurais peut-être pu nous montrer ?

Fin bon, exemple d'utilisation :

Code :
1
2
3
4
5
6
7
for(int i = 0; i < nombreDIterations(); i++) {
  faireDesTrucs(i);
  if(ilEstTempsDeSArreter(i)) {
    break;
  }
  faireDAutresTrucsSiOnVeut(i);
}
Sinon, vu que c'est dans une méthode qui contient juste cette boucle, on peut en sortir avec un return :

Code :
1
2
3
4
5
6
7
8
9
boolean verifierUnTruc() {
  for(int i = 0; i < nombreDIterations(); i++) {
    int calcul = calculerPourCetteIteration(i);
    if(leCalculVerifieBien(calcul)) {
      return true;
    }
  }
  return false;
}
Mais excuses il est bien vraie que mettre ma tentative concernant le break aurai été bien venu. Mais en toute franchise j'y vais à tâton est par consequent avais essayé le break avant de demander votre aide;
Alors voila ce que j'ai avec un break (ca ne marche pas) en essayant d'appliquer la methode ci-dessus.
Code :
1
2
3
4
5
6
7
8
9
10
11
	public boolean estPair(){
		boolean est_pair=false;
		for(int i = 0; i < pair.length; i++) {
			  est_pair=true;
			  if(this.nombre==pair[i]) {
			    break;
			  }
 
			}
		return est_pair;
	}
Bissmark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 09h16   #7
Membre habitué
 
Homme Vincent Charlet
Ingénieur développement logiciels
Inscription : novembre 2011
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Vincent Charlet
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2011
Messages : 68
Points : 127
Points : 127
Tu as essayé de coder comme cela (en espérant que this.nombre contient la bonne valeur que tu veux tester)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
public boolean estPair(){
 
                this.nombreEstPair=false;
		for (int i=0;i<this.pair.length;i++){
			if (this.nombre==pair[i]){
				this.nombreEstPair=true;
                                break;
			}
 
		}
                return this.nombreEstPair;	
	}
v.charlet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 13h04   #8
Invité de passage
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
Citation:
Envoyé par v.charlet Voir le message
Tu as essayé de coder comme cela (en espérant que this.nombre contient la bonne valeur que tu veux tester)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
public boolean estPair(){
 
                this.nombreEstPair=false;
		for (int i=0;i<this.pair.length;i++){
			if (this.nombre==pair[i]){
				this.nombreEstPair=true;
                                break;
			}
 
		}
                return this.nombreEstPair;	
	}
Merci pour la réponse; j'ai donc modifié mon code en consequence mais ca ne Marche pas....Voila ce que j'ai

En attribut:
protected boolean est_pair;

Code :
1
2
3
4
5
6
7
8
9
10
11
12
public boolean estPair(){
 
        this.est_pair=false;
        for (int i=0;i<this.pair.length;i++){
        	if (this.nombre==pair[i]){
        		this.est_pair=true;
                        break;
        	}
 
        }
        return this.est_pair;	
	}
Bissmark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 13h12   #9
Membre habitué
 
Homme Vincent Charlet
Ingénieur développement logiciels
Inscription : novembre 2011
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Vincent Charlet
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2011
Messages : 68
Points : 127
Points : 127
alors c'est que this.nombre n'a pas la valeur que tu penses

montres le main() de ton programme pour voir comment tu utilises ta classe ?
v.charlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 15h32   #10
Invité de passage
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class Roulette {
 
	/**Attributs*/
	protected int mise_min;
	protected int mise_max;
	protected int[]pair=new int[]{2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36};
	protected int[]passe=new int[]{19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36};
	protected int[]rouge=new int[]{32,19,21,25,34,27,36,30,23,5,16,1,14,9,18,7,12,3};
	protected int nombre;
	protected boolean est_pair;
	/**Constructeur*/
	public Roulette(int mise_min,int mise_max){
		this.mise_min=mise_min;
		this.mise_max=mise_max;
	}
 
	/**Méthodes*/
	public int tirage(){
		int nombre=(int)(Math.random()*36);
	/**permet d'obtenir un nombre pseudo-aléatoire compris entre 0(par défaut) et 36*/
		return nombre;
	}
	public int getNombre(){
		return this.nombre;
	}
	public boolean estPair(){
 
        this.est_pair=false;
        for (int i=0;i<this.pair.length;i++){
        	if (this.nombre==pair[i]){
        		this.est_pair=true;
                        break;
        	}
 
        }
        return this.est_pair;	
	}
 
 
 
 
 
}


Class de TEst

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TestRoulette {
	private int testCount = 0;
	private int testFailed = 0;
	public static void main(String[] args) {
		(new TestRoulette()).run();
	}
 
	public void run() {
		testBasique();
	}		
 
	public void testBasique() {
		System.out.println("== Test Basique ");
 
		Roulette r = new Roulette(5, 100);
		System.out.println("obtenu: "+r.tirage());
		System.out.println("obtenu: "+r.estPair());
Bissmark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 17h41   #11
Modérateur
 
Avatar de dinobogan
 
Homme Dinobogan Shelashyn
ingénieur étude et développement
Inscription : juin 2007
Messages : 3 276
Détails du profil
Informations personnelles :
Nom : Homme Dinobogan Shelashyn
Âge : 31
Localisation : France

Informations professionnelles :
Activité : ingénieur étude et développement
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2007
Messages : 3 276
Points : 4 886
Points : 4 886
Ton problème vient de la méthode "tirage" qui créé une variable locale "nombre".
cette variable locale masque la donnée membre de même nom.
Retire le "int" et ça devrait aller beaucoup mieux.
__________________
Que la force de la puissance soit avec le courage de ta sagesse.
dinobogan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 18h56   #12
Invité de passage
 
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
Merci bcp
Bissmark est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h46.


 
 
 
 
Partenaires

Hébergement Web