IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

comment mettre à jour une variable en fin de boucle?


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 19
    Points : 10
    Points
    10
    Par défaut comment mettre à jour une variable en fin de boucle?
    Bonjour. Lors de mes cours, j'avais vu qu'il était possible de modifier la valeur d'une variable en fin de boucle. J'ai tenté de le faire avec une affectation, mais :
    soit l'affectation n'est pas placée au bon endroit dans ma boule pour que ça modifie les valeurs,
    soit j'ai foiré quelque chose avec l'affichage.

    Je reprends du début: j'ai voulu créer un jeu de "devine un nombre", et je souhaite que la phrase qui intervient au début de chacun des tours soit modifiée en fonction des résultats du tour précédent. par exemple "il vous reste 10 coups pour deviner un nombre entre 1 et 1000." deviendrait "il vous reste 9 coups pour deviner un nombre entre 500 et 1000." si le nombre proposé était 500 et la réponse était "c'est plus".

    Comment dois-je modifier le code que je vous propose pour obtenir ce que je souhaite, et surtout, POURQUOI?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.util.Scanner;
    import java.util.Random;
     
    class test7 {
    	public static void main (String args[]){
    		System.out.println("Saurez-vous deviner ce nombre entre 1 et 1000 en moins de 10 coups?");
    		int coups=10;
    		Random random = new Random();
    		int randomNumber = random.nextInt(1000);
    		int cible = randomNumber;
    		Scanner scanner = new Scanner(System.in);
    		while (coups!=0){
    			int min=1;
    			int max=1000;
    			System.out.println("Il vous reste "+coups+" coups pour trouver un nombre entre "+ min +" et "+ max+".");
    			System.out.println("Choisissez un nombre.");
    			int choix = scanner.nextInt();
    			{if (choix == cible){
    			System.out.println("c'est gagné!");		
    				}else {	if (choix < min){
    					System.out.println("Nombre invalide. Recommencez.");
    						}else {if (choix > max){
    						System.out.println("Nombre invalide. Recommencez.");
    							}else {if (choix > cible){
    							System.out.println("c'est moins!");
    							choix=max;
    								}else {if (choix < cible){
    								System.out.println("c'est plus!");
    								choix = min;
    									}coups--;
    								{if (coups == 0);
    									System.out.println("c'est perdu!");
    									}  
    							}
    						}
    					}
    			}			
    	}
    }
    }
    }
    merci par avance.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Par fin de boucle, tu veux dire fin de bloc (ce que j’appellerai itération pour la suite, soit la boucle c'est plusieurs itérations...), non ? La fin d'une boucle, c'est quand sa condition de sortie devient vraie et qu'on ne boucle plus en conséquence. D'après ce que je comprends, tu voudrais qu'un message affiché en itération i, soit différent dans l'itération i+1. Il suffit dans ce cas que l'affectation soit fait à la fin du bloc de la boucle, et que le scope de la variable ne soit pas limité au bloc forcément (sinon c'est une variable différente par boucle).

    Donc, déjà, le scope de min et max ne convient pas : ces variables sont locales au bloc de la boucle. Il s'agit donc de nouvelles variables à chaque itération et donc il n'est pas possible qu'elles conservent une valeur affectée dans l'itération précédente. Le seule moyen est d'élargir le scope :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int min=1;
    int max=1000;
    while() {
     
       System.out.println("Il vous reste "+coups+" coups pour trouver un nombre entre "+ min +" et "+ max+".");
     
       /*...  ... */
             else {if (choix > cible){
    	 System.out.println("c'est moins!");
    	 choix=max;
    	 }else {if (choix < cible){
    	 System.out.println("c'est plus!");
    	 choix = min;
       /*...  ... */
     
     
    }
    Il y a un autre problème dans ton code : les termes des affectations sont inversées. ( choix = max, veut dire qu'on met la valeur de max dans choix, or c'est l'inverse qu'on veut faire), donc la boucle sera en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int min=1;
    int max=1000;
    while() {
     
       System.out.println("Il vous reste "+coups+" coups pour trouver un nombre entre "+ min +" et "+ max+".");
     
       /*...  ... */
             else {if (choix > cible){
    	 System.out.println("c'est moins!");
    	 max=choix;
    	 }else {if (choix < cible){
    	 System.out.println("c'est plus!");
    	 min = choix;
       /*...  ... */
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 14
    Dernier message: 26/03/2007, 16h52
  2. Réponses: 1
    Dernier message: 15/09/2006, 11h24
  3. Réponses: 2
    Dernier message: 01/08/2006, 16h40
  4. Comment mettre à jour une date ?
    Par Hokagge dans le forum MFC
    Réponses: 6
    Dernier message: 22/03/2006, 12h30
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo