Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme boucle

    22 septembre 2020 à 10:11:14

    Bonjour, le programme suivant est censé me dire si une lettre saisie par l'utilisateur est bien présente dans le tableau mais je vois pas ou est l'erreur 

    //
    
    import java.util.Scanner;
    
    import javax.swing.JFrame;
    
    public class OkOk {
    
    	public static void main(String[] args) {
    		
    		char tableauCaractere[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
    		int i = 0;
    		char reponse = ' ',carac = ' ';
    		Scanner sc = new Scanner(System.in);
    		
    		while(i < tableauCaractere.length && carac != tableauCaractere[i])
    		{
    			i++;
    			System.out.println("Rentrez une lettre en minuscule, SVP");
    			carac = sc.nextLine().charAt(0);
    			
    			if (carac == tableauCaractere[i])
    				System.out.println("La lettre "+carac+" se trouve bien dans le tableau !");
    			else 
    				System.out.println("La lettre "+carac+" ne se trouve dans le tableau");
    			
    			
    		}
    		System.out.println("Au revoir !");
    	} 
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2020 à 13:32:22

      Bonjour,

      Le problème vient du fait que tu demandes la saisie du caractère à vérifier au sein de la boucle. Par conséquent, on va demander à l'utilisateur de saisir un caractère 7 fois.

      Donc déplace les lignes 19 + 20 avant la ligne 16 et ça devrait répondre à ton besoin

      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2020 à 15:37:06

        Re,

        J'ai interchangé les lignes mais le programme ne fonctionne toujours pas. C'est bizarre, j'ai déjà fais exactement le même procédé en C et ça fonctionnait

        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2020 à 17:22:16

          One_Shot a écrit:

          Re,

          J'ai interchangé les lignes mais le programme ne fonctionne toujours pas. C'est bizarre, j'ai déjà fais exactement le même procédé en C et ça fonctionnait


          Il arrive facilement qu'on se persuade d'avoir fait exactement ce qu'il fallait.

          Mais alors, c'est la faute à qui si ça ne marche pas ? :-)

          Si on voyait le code, on pourrait t'aider.

          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2020 à 18:06:14

            Tu devrais déplacer la ligne 18 (incrementation) a la fin de la boucle.
            • Partager sur Facebook
            • Partager sur Twitter
              23 septembre 2020 à 22:48:34

              Rien ne fonctionne. 

              En fait j'étudie avec l'ancien cours de Java et j'essaie de refaire le programme suivant avec une autre  boucle que la boucle "do while" car je la trouve vraiment contre intuitif et j'ai toujours eu du mal avec. J'aime pas cette manière de raisonner "à l'envers"

              char tableauCaractere[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
              int i = 0;
              char reponse = ' ',carac = ' ';
              Scanner sc = new Scanner(System.in);
                       
              do {//Boucle principale
                do {//On répète cette boucle tant que l'utilisateur n'a pas rentré une lettre figurant dans le tableau
                  i = 0;
                  System.out.println("Rentrez une lettre en minuscule, SVP ");
                              
                  carac = sc.nextLine().charAt(0);
                  //Boucle de recherche dans le tableau
                  while(i < tableauCaractere.length && carac != tableauCaractere[i])
                    i++;
                       
                  //Si i < 7 c'est que la boucle n'a pas dépassé le nombre de cases du tableau 
                  if (i < tableauCaractere.length)
                    System.out.println(" La lettre " +carac+ " se trouve bien dans le tableau !");
                  else //Sinon
                    System.out.println(" La lettre " +carac+ " ne se trouve pas dans le tableau !");
                       
                }while(i >= tableauCaractere.length);
              
                //Tant que la lettre de l'utilisateur ne correspond pas à une lettre du tableau    
                do{
                  System.out.println("Voulez-vous essayer à nouveau ? (O/N)");
                  reponse = sc.nextLine().charAt(0);
                }while(reponse != 'N' && reponse != 'O');      
              }while (reponse == 'O');
                              
              System.out.println("Au revoir !");



              • Partager sur Facebook
              • Partager sur Twitter
                23 septembre 2020 à 22:57:03

                Y a pas de classe, y a pas de main, c'est normal que ça ne fonctionne pas.

                Il n'y a pas de trucs "intuitifs" dans les langages de programmation. Il y a des éléments qui ont une signification précise, et qu'il faut assembler avec rigueur. 

                -
                Edité par michelbillaud 23 septembre 2020 à 23:11:08

                • Partager sur Facebook
                • Partager sur Twitter
                  23 septembre 2020 à 23:03:42

                  michelbillaud a écrit:

                  Y a pas de classe, y a pas de main, c'est normal que ça ne fonctionne pas.


                  Si j'ai bien compris, celui la il marche mais le PO veut le réécrire sans do....while.

                  Il nous faudrait la derniere version (qui ne fonctionne pas).

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 septembre 2020 à 8:27:54

                    michelbillaud a écrit:

                    Y a pas de classe, y a pas de main, c'est normal que ça ne fonctionne pas.

                    Il n'y a pas de trucs "intuitifs" dans les langages de programmation. Il y a des éléments qui ont une signification précise, et qu'il faut assembler avec rigueur. 

                    -
                    Edité par michelbillaud il y a environ 9 heures

                    Il y a un main et les classes, j'ai juste copié ce code (Qui fonctionne)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 septembre 2020 à 10:27:48

                      thetui a écrit:

                      Il nous faudrait la derniere version (qui ne fonctionne pas).



                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 septembre 2020 à 10:46:18

                        One_Shot a écrit:

                        Il y a un main et les classes, j'ai juste copié ce code (Qui fonctionne)


                        Le code présenté dans le message n'avait ni main ni classes, et était précédé par la phrase "Rien ne fonctionne". Rien, normalement, ça veut dire : rien. Aucun code ne fonctionne.

                        Je parlais de rigueur, c'était pas juste pour causer. Pour aider, on préfère éviter de perdre du temps à jouer aux devinettes. Il faut poser les problèmes clairement. Et en général, quand on le fait, on trouve tout seul.

                        -
                        Edité par michelbillaud 24 septembre 2020 à 10:48:33

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 septembre 2020 à 15:22:52

                          en gros, tu veux transformer les do{..}while en while{} ?

                          donc pourquoi ne pas avoir déjà au moins tout recopier tel que c'était. Ensuite, si tu remplaces le do par le while, il faut "juste" que la condition du while soit vrai juste avant pour y rentrer; donc pour la 1ère boucle, il faut que reponse = 'O'; pour la seconde, il faut i soit supérieur ou égale à tableauCaractere.lenght (donc le plus simple i = tableauCaractere.length); et pour le dernier do{}while, il faut que reponse soit différent de O ou N (donc en principe ça devrait être bon mais on peut mettre reponse='' ou reponse='a' avant si on veut)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 septembre 2020 à 16:10:46

                            Il faut surtout casser la complexité du truc en sortant les morceaux dans des fonctions.

                            Exemple

                            do {
                               ...
                            while (poserQuestion("Vous voulez continuer ?"));
                            

                            avec

                            // Pose une question et insiste jusqu'à ce qu'on
                            // réponde O ou N.
                            
                            // retourne true si O, false si N
                            
                            static boolean poserQuestion(String question)
                            {
                                System.out.println(question);
                                while (true) {
                                    System.out.println("(repondez par O ou N)");
                                    char c = lireCaractere();
                                    if (c == 'O') return true;
                                    if (c == 'N') return false;
                                }
                            }
                            


                            Ensuite, c'est stupide de faire du C en Java.   Java apporte des façons plus intéressantes (*) de parcourir un tableau, il faut les connaître et les utiliser.

                            boolean tableauContient(char lettre) 
                            {
                                char[] tableau = { 'a', 'b', .... };
                            
                                for (char c : tableau) {
                                    if (lettre == c) return true;
                                }
                            
                                return false;
                            }
                            


                            (*) range-based for loop.  "Intuitivement", c'est  "pour chaque caractère c du tableau, faire"

                            Et c'est plus simple que "pour tout entier allant de 0 à la longueur - 1 du tableau, faire quelque chose", vu que ce qui nous intéresse, c'est les caractères du tableau. Leurs indices, on n'en n'a rien à péter.

                            -
                            Edité par michelbillaud 24 septembre 2020 à 16:20:15

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Probleme boucle

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown