A l'aide !!!

A l'aide !!! - Java - Programmation

Marsh Posté le 19-11-2017 à 00:30:57    

Bonjour,
 
S'il vous plait,
 
Pourriez vous m'aider a resoudre ce probleme, je tourne en rond depuis trois jours. Comment faire pour sortir de cette boucle infernal et d'arriver au messge de fin de programme avec affichage de nombre total de saisies de "oui".
 
Voici mon code.
 

Code :
  1. public static void main (String[] params) {
  2.         presenterLogiciel();
  3.         boolean saisie = true  ;
  4.         int nbrAnalyse = 0;
  5.         int nbrTotalAnalyse = 0;
  6.         saisie = continuer("\nVoulez-vous traiter des combinaisons" +
  7.             "\nde codes postaux et de numeros civiques (oui / non)?" );
  8.         nbrAnalyse = "oui" ; /// quelque chose comme ca !!!!
  9.         if (saisie == false){
  10.             /// affiche le nombre de "oui" ou "o" saisis/////
  11.             nbrTotalAnalyse = nbrAnalyse +1;
  12.             //////
  13.             System.out.println("Nombre d'analyses effectuees:" + nbrAnalyse);
  14.             System.out.println("\nF I N N O R M A L E D U P R O G R A M M E" );
  15.         }
  16.         do {
  17.             int no1 = saisirEtValiderNoCivique("\nEntrez un numero" +
  18.                     "civique pour la PREMIERE adresse : ", 1, 9999);
  19.             String code1 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  20.                     " espaces pour la PREMIERE adresse", no1 );
  21.             int no2 = saisirEtValiderNoCivique("\nEntrez un numero" +
  22.                     "civique pour la DEUXIEME adresse : ", 1, 9999);
  23.             String code2 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  24.                     " espaces pour la DEUXIEME adresse", no2 );
  25.             afficherInfosComparatives (no1, code1, no2, code2);
  26.             if (saisie == false){
  27.                 //// get the hell out of this boucle /////
  28.             }
  29.         } while (true);
  30.         nbrTotalAnalyse = nbrAnalyse +1;
  31.         System.out.println("Nombre d'analyses effectuees:" + nbrTotalAnalyse);
  32.         System.out.println("\nF I N N O R M A L E D U P R O G R A M M E" );
  33.     } // main


 
Merci pour votre aide tres precieuse.
 
Cordialement.

Message cité 1 fois
Message édité par luumien le 19-11-2017 à 02:58:40
Reply

Marsh Posté le 19-11-2017 à 00:30:57   

Reply

Marsh Posté le 19-11-2017 à 07:27:53    

luumien a écrit :

Bonjour,
 
S'il vous plait,
 
Pourriez vous m'aider a resoudre ce probleme, je tourne en rond depuis trois jours. Comment faire pour sortir de cette boucle infernal et d'arriver au messge de fin de programme avec affichage de nombre total de saisies de "oui".
 
Voici mon code.
 

Code :
  1. public static void main (String[] params) {
  2.         presenterLogiciel();
  3.         boolean saisie = true  ;
  4.         int nbrAnalyse = 0;
  5.         int nbrTotalAnalyse = 0;
  6.         saisie = continuer("\nVoulez-vous traiter des combinaisons" +
  7.             "\nde codes postaux et de numeros civiques (oui / non)?" );
  8.         nbrAnalyse = "oui" ; /// quelque chose comme ca !!!!
  9.         if (saisie == false){
  10.             /// affiche le nombre de "oui" ou "o" saisis/////
  11.             nbrTotalAnalyse = nbrAnalyse +1;
  12.             //////
  13.             System.out.println("Nombre d'analyses effectuees:" + nbrAnalyse);
  14.             System.out.println("\nF I N N O R M A L E D U P R O G R A M M E" );
  15.         }
  16.         do {
  17.             int no1 = saisirEtValiderNoCivique("\nEntrez un numero" +
  18.                     "civique pour la PREMIERE adresse : ", 1, 9999);
  19.             String code1 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  20.                     " espaces pour la PREMIERE adresse", no1 );
  21.             int no2 = saisirEtValiderNoCivique("\nEntrez un numero" +
  22.                     "civique pour la DEUXIEME adresse : ", 1, 9999);
  23.             String code2 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  24.                     " espaces pour la DEUXIEME adresse", no2 );
  25.             afficherInfosComparatives (no1, code1, no2, code2);
  26.             if (saisie == false){
  27.                 //// get the hell out of this boucle /////
  28.             }
  29.         } while (true);
  30.         nbrTotalAnalyse = nbrAnalyse +1;
  31.         System.out.println("Nombre d'analyses effectuees:" + nbrTotalAnalyse);
  32.         System.out.println("\nF I N N O R M A L E D U P R O G R A M M E" );
  33.     } // main


 
Merci pour votre aide tres precieuse.
 
Cordialement.


 
Ouhlà... Je crois que tu as commencé à écrire ton code sans vraiment savoir ce que tu voulais vraiment faire. Je suis de la vieille école, mais il me semble que commencer à écrire le programme "en français" (ou en volapuk si tu préfères c'est pas important) avant de coder c'est souvent une bonne idée.
 
Il n'est pas possible de corriger totalement ton programme avec ce que tu as donné, mais je peux déjà te donner une ou deux piste.
 
1) nbrAnalyse est déclaré comme int, donc tu ne peux pas lui assigner la valeur "oui"   (ligne 11 de ton code)
2) Ligne 13 à 22. Si "saisie" est false, le code du block if sera exécuté, mais ensuite la boucle aussi. peut-être qu'il y a un petit "else" à rajouter.
3) dans la boucle "do while()", je ne vois aucune instruction qui pourrait modifier la valeur de la variable "saisie", donc soit saisie est false au début de la boucle et tu ne veux le contenu de la boucle qu'une seule fois, soit c'est saisie est "true" et tu tombes dans une boucle infinie.
4) parce que je suis un peu sadique je te donne l'instruction pour sortir d'une boucle, c'est "break", mais je ne crois pas que tu en aies besoin ici. Tu dois d'abord savoir exactement ce que tu veux faire...  Et vraisemblablement que cela t'amènera à modifier le "while(true)", qui est quand même rare dans un programme desktop. Mais pour cela tu  dois pouvoir changer la valeur de la variable "saisie" à l'intérieur de la boucle.
 
enfin moi ce que j'en dis...  
 

Reply

Marsh Posté le 19-11-2017 à 15:21:45    

leonhard a écrit :


 
Ouhlà... Je crois que tu as commencé à écrire ton code sans vraiment savoir ce que tu voulais vraiment faire. Je suis de la vieille école, mais il me semble que commencer à écrire le programme "en français" (ou en volapuk si tu préfères c'est pas important) avant de coder c'est souvent une bonne idée.
 
Il n'est pas possible de corriger totalement ton programme avec ce que tu as donné, mais je peux déjà te donner une ou deux piste.
 
1) nbrAnalyse est déclaré comme int, donc tu ne peux pas lui assigner la valeur "oui"   (ligne 11 de ton code)
2) Ligne 13 à 22. Si "saisie" est false, le code du block if sera exécuté, mais ensuite la boucle aussi. peut-être qu'il y a un petit "else" à rajouter.
3) dans la boucle "do while()", je ne vois aucune instruction qui pourrait modifier la valeur de la variable "saisie", donc soit saisie est false au début de la boucle et tu ne veux le contenu de la boucle qu'une seule fois, soit c'est saisie est "true" et tu tombes dans une boucle infinie.
4) parce que je suis un peu sadique je te donne l'instruction pour sortir d'une boucle, c'est "break", mais je ne crois pas que tu en aies besoin ici. Tu dois d'abord savoir exactement ce que tu veux faire...  Et vraisemblablement que cela t'amènera à modifier le "while(true)", qui est quand même rare dans un programme desktop. Mais pour cela tu  dois pouvoir changer la valeur de la variable "saisie" à l'intérieur de la boucle.
 
enfin moi ce que j'en dis...  
 


 
Merci pour votre aide .
 
 je ne dois pas utiliser break ailleurs que dans switch selon l'enonce !!!
 
A vrai dire au debut c'etait vraiment tres claire. Voici ce que j'avais avant de mettre les if  et les do while():
 
1. la methode continuer :
 

Code :
  1. public static boolean continuer (String msgInvite){
  2.         String saisie = ""; 
  3.         boolean response = true;
  4.         System.out.print(msgInvite);
  5.        
  6.         while (response = true) {
  7.             if(saisie.equalsIgnoreCase("oui" ) || saisie.equalsIgnoreCase("o" )){
  8.                 return true;
  9.             }
  10.             if(saisie.equalsIgnoreCase("non" ) || saisie.equalsIgnoreCase("n" )
  11.             ){
  12.                 return false;
  13.             }
  14.             System.out.println("ERREUR! La reponse doit etre oui, non , o ou n !" );
  15.          
  16.         }
  17.         return response;
  18.     }


 
 
2 . dans le main :
 

Code :
  1. presenterLogiciel();
  2.         boolean saisie   ;
  3.        
  4.         saisie = continuer("\nVoulez-vous traiter des combinaisons" + /// demande a l'utilisateur d'effectuer des combinaisons de numeros et codes postaux ///
  5.             "\nde codes postaux et de numeros civiques (oui / non)?" );  /// oui = true, non  = false, autre = "message d'erreur" ////
  6.         //////////// si non, affichage du nombre d'analyses effectuees = 0, et fin de programme ///////////////////
  7.        
  8.          //// quand je dis oui alors je saisis et valide les donnees/////
  9.        
  10.             int no1 = saisirEtValiderNoCivique("\nEntrez un numero" +
  11.                     "civique pour la PREMIERE adresse : ", 1, 9999);
  12.             String code1 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  13.                     " espaces pour la PREMIERE adresse", no1 );
  14.             int no2 = saisirEtValiderNoCivique("\nEntrez un numero" +
  15.                     "civique pour la DEUXIEME adresse : ", 1, 9999);
  16.             String code2 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  17.                     " espaces pour la DEUXIEME adresse", no2 );
  18.           //////////////////////////////////////////////////////////
  19.           //// affichage du comparatif /////
  20.             afficherInfosComparatives (no1, code1, no2, code2);
  21.          ////////////////////////////////////////////////////////////
  22.              saisie = continuer("\nVoulez-vous traiter des combinaisons" + /// demande a l'utilisateur d'effectuer des combinaisons de numeros et codes postaux ///
  23.             "\nde codes postaux et de numeros civiques (oui / non)?" );  /// oui = true, non  = false, autre = "message d'erreur" ////
  24.             ///// si oui je retourne au  debut et effectue une nouvelle analyse  
  25.            ///// si non affichage du nombre d'analyses effectuees et fin de programme /////////////////


 
Voila ce que j'ai fait selon vos indications :
 

Code :
  1. presenterLogiciel();
  2.         boolean saisie   ;
  3.         //int nbrAnalyse = 0;
  4.         //int nbrTotalAnalyse = 0;
  5.         saisie = continuer("\nVoulez-vous traiter des combinaisons" +
  6.             "\nde codes postaux et de numeros civiques (oui / non)?" );
  7.         //nbrAnalyse = "oui" ; /// quelque chose comme ca !!!!
  8.         if (saisie == false){
  9.             /// affiche le nombre de "oui" ou "o" saisis/////
  10.             ///nbrTotalAnalyse = nbrAnalyse +1;
  11.             //////
  12.             ///System.out.println("Nombre d'analyses effectuees:" + nbrAnalyse);
  13.             System.out.println("\nF I N N O R M A L E D U P R O G R A M M E" );
  14.         }else{
  15.             do {
  16.                 int no1 = saisirEtValiderNoCivique("\nEntrez un numero" +
  17.                         "civique pour la PREMIERE adresse : ", 1, 9999);
  18.                 String code1 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  19.                         " espaces pour la PREMIERE adresse", no1 );
  20.                 int no2 = saisirEtValiderNoCivique("\nEntrez un numero" +
  21.                         "civique pour la DEUXIEME adresse : ", 1, 9999);
  22.                 String code2 = saisirEtValiderCodePostal("\nEntrez un code postal SANS" +
  23.                         " espaces pour la DEUXIEME adresse", no2 );
  24.                 afficherInfosComparatives (no1, code1, no2, code2);
  25.             } while (true);
  26.         }
  27.         //nbrTotalAnalyse = nbrAnalyse +1;
  28.         //System.out.println("Nombre d'analyses effectuees:" + nbrAnalyse);


 
Pourriez-vous m'indiquer comment sortie de la boucle while(true) et revenir sur le message invite.
 
Pourriez-vous aussi me m'indiquer comme faire pour l'affichage du nombre analyses effectuees.
 
Merci bcp.
 
Cordialement.

Message cité 1 fois
Message édité par luumien le 19-11-2017 à 16:42:08
Reply

Marsh Posté le 20-11-2017 à 07:44:15    

luumien a écrit :


 
[...]

Code :
  1. public static boolean continuer (String msgInvite){
  2.         String saisie = ""; 
  3.         boolean response = true;
  4.         System.out.print(msgInvite);
  5.        
  6.         while (response = true) {
  7.             if(saisie.equalsIgnoreCase("oui" ) || saisie.equalsIgnoreCase("o" )){
  8.                 return true;
  9.             }
  10.             if(saisie.equalsIgnoreCase("non" ) || saisie.equalsIgnoreCase("n" )
  11.             ){
  12.                 return false;
  13.             }
  14.             System.out.println("ERREUR! La reponse doit etre oui, non , o ou n !" );
  15.          
  16.         }
  17.         return response;
  18.     }


 
 
[...]


 
Es-tu sûr de comprendre comment fonctionne cette simple méthode ? Juste 2 remarques:
1) Dans la programmation structurée, chaque fonction (méthode) doit avoir un seul point d'entrée et un seul point de sortie, donc un seul return.
2) Pour une instruction "while" il faut donner une expression booléenne qui ne soit pas une assignation !  (remarque pour ceusses qui ont un peu d'expérience: oui je sais ce que vaut l'évaluation d'un assignation booléenne, mais ce n'est pas une bonne idée ici).
 
Le code que tu donnes ici ne peut pas fonctionner, il est incomplet ! (voir par exemple la valeur de la variable "saisie"!)

Reply

Marsh Posté le 20-11-2017 à 16:22:21    

Luumien es tu allé voir ton premier topic, j'y ai posté 2 codes :  http://forum.hardware.fr/hfr/Progr [...] m#t2307855

Reply

Marsh Posté le 21-11-2017 à 16:08:05    

Merci pour votre aide !!!
 
J'ai reussi a resoudre le probleme dans le main.  
 
Cordialement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed