Explication ''

Le problème exposé dans ce sujet a été résolu.

Salut, je suis le cour sur Java mais je ne comprends pas l’utilité du réponse =’ ’ vers le bas:

 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
import java.util.Scanner;

public class Java_2 extends HelloWorld {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String Starter = "G";
        String name;
        char reponse = 'O';
        Scanner sc = new Scanner(System.in);
        if (Starter == "G")
        {
          System.out.println("Name : ");
          name = sc.nextLine();
          System.out.println("Hello " + name + ",  how are you ?");                       

          reponse = ' ';

          while(reponse != 'O' && reponse != 'N')
          {
            //On demande si la personne veut faire un autre essai
            System.out.println("Voulez-vous réessayer ? (O/N)");
            reponse = sc.nextLine().charAt(0);
          }
        System.out.println("End");
        }

    }
}

Bonjour,

Il faut bien initialiser la variable reponse à quelque chose avant le test ligne 20 (quelque chose qui soit différent de 'O' et 'N').

Pour moi la question serait plutôt de savoir pourquoi elle n’est pas directement initialisée à ça ligne 10, car cette dernière est inutile en l’état.

Salut,

Le programme est mal écrit, non seulement il y a plein d’optimisation à faire pas compliqué dans l’écriture du code, mais surtout on boucle sur la demande de réessayage donc si la personne souhaite réessayer on va juste le lui proposer de réessayer à nouveau. EDIT : j’ai lu en travers, c’est même pas ça, c’est si il répond mal on redemande, sinon qu’il reponde O ou N, on termine le programme

Mais pour répondre à la question d’origine, on a la ligne reponse=' '; (qui est différent de reponse=''; réponse vaut le caractère espace dans le premier cas, et il vaut pas de caractère dans le second) pour initialiser reponse afin de faire la boucle au moins une fois. Puisque si on ne mets pas cette ligne, reponse ayant été initialisé à ’O’ lors de sa déclaration (et pas utilisé entre temps) la condition while(reponse != 'O') est fausse et la boucle est sautée.

+0 -0

Dans sa conception, peut-être qu’au début, l’auteur du code avait fait :

1
2
3
4
5
6
7
8
      reponse = ' ';

      while(reponse.charAt(0) != 'O' && reponse.charAt(0) != 'N')
      {
        //On demande si la personne veut faire un autre essai
        System.out.println("Voulez-vous réessayer ? (O/N)");
        reponse = sc.nextLine();
      }

Et pour éviter une erreur lors de la première exécution du charAt sur une chaine vide, il a ajouté cette ligne.

Bonsoir(ou bonjour) salut, désoler de répondre aussi tardivement.. J’ai essayé de faire avec la boucle do..while est voilà

 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
import java.util.Scanner;

public class test_3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String name;
        Scanner sc = new Scanner(System.in);    
        char rep = 'Y';

        do{
            System.out.print("Name :");
            name = sc.nextLine();
            System.out.println("Hello " + name);
            System.out.println("Are you fine Y/N ");
            rep = ' ';

        }while (rep != 'Y' && rep!= 'N');
            System.out.println("Y or N");
            rep = sc.nextLine().charAt(0);


        System.exit(0);



    }

}

`

Je pense que c’est un peu plus optimisé comme ça mais j’ai un problème, je n’ai le temps de taper ’Y’ ou ’N’, le programme recommence à chaque fois ? Une condition de plus à rajouter ?

(C’est le cour sur sdz que je suis)

+0 -0

Apparemment tu as un petit problème de logique/compréhension du cours. N’hésite pas à le relire calmement pour bien comprendre les passages en question.

Tu demandes à l’utilisateur s’il souhaite recommencer après avoir quitté la boucle (donc tu ne peux plus utiliser la boucle).

Tu dois demander une saisie utilisateur avant de vérifier la condition donc avant } do (...);.

Ya un truc bizarre qui se passe. J’ai bien mis rep !=.. System.out.println("Not correct"); donc si j’écris autre chose que Y ou N, sa dira "not correct" normalement.. mais non, si j’écris Y ou N sa met not correct alors que d’autre mot ou lettre ça les laisse passer ??

 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
import java.util.*;
import java.util.Scanner;

public class test_3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String name;
        Scanner sc = new Scanner(System.in);    
        char rep = 'Y';

        do{
            System.out.print("Name :");
            name = sc.nextLine();
            System.out.println("Hello " + name);
            System.out.println("Are you fine Y/N ");
            rep = ' ';
            rep = sc.nextLine().charAt(0);

        }while (rep != 'Y' && rep!= 'N');
            System.out.println("Not correct");





    }

}

`
+0 -0

ton instruction rep=' '; ne sert plus à rien, ça servait à s’assurer d’exécuter au moins une fois la boucle, ce que t’assure déjà le do…while().

la boucle s’exécute tant que la condition est vérifiée, et ta condition est vérifiée tant que la première lettre de la ligne qu’a entré l’utilisateur n’est ni un ’Y’ ni un ’N’.
Lorsqu’il répondra l’une de ces réponses, que ce soit ’Y’ ou ’N’, ton programme sort de la boucle (donc a le même comportement d’afficher "Not correct")

Ce qui se passe est exactement ce que tu as écrit, il n’y a pas de comportement étrange ici, tu n’as simplement pas saisi correctement le cours, relis le cours attentivement, et si tu ne saisi toujours pas lis un autre cours.

J’ai fais une fausse manip j’ai supprimé mon message.

Tu as un problème de logique/compréhension. Il ne faut pas que tu te dises que le code répété est celui en dessous de while (condition) mais que tu te dises que c’est le code qui se trouve entre tes accolades.

Voilà, j’ai bien relie et je décidé de faire sans le do{}while.Le seul problème c’est que je voudrais arréter la boucle après avoir taper Y ou N

 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
import java.util.*;
import java.util.Scanner;

public class Java_2 extends HelloWorld {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    String name;
    Scanner sc = new Scanner(System.in);
    char rep = 'Y';
    char Starter = 'H';


    while(Starter == 'H')
    {
    System.out.println("Nom : ");
    name = sc.nextLine();
    System.out.println("Hello " + name + "\nHow are you Y/N ?");//The hello
    rep = sc.nextLine().charAt(0);

    while(rep != 'Y' && rep != 'N')
    {
        System.out.println("Incorrect Y/N");
        rep = sc.nextLine().charAt(0);

    }




    }
    System.exit(0);


    }
}

On va te donner une réponse que tu n’auras pas compris alors que si tu maîtrises le fonctionnement des boucles tu trouveras par toi-même la solution.

Si tu veux que le code s’arrête après avoir saisi Y ou N, pourquoi tu mets 2 boucles ? La première boucle est inutile.

J’ai bien bien relis le cour sur java. C’est vrai que le starter ne sert à rien. Merci d’avoir répendu à toutes mes questions:D (Marche maintenant)

 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
import java.util.*;
import java.util.Scanner;

public class Java_2 extends HelloWorld {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    String name;
    Scanner sc = new Scanner(System.in);
    char rep = 'Y';



    System.out.println("Nom : ");
    name = sc.nextLine();
    System.out.println("Hello " + name + "\nHow are you Y/N ?");//The hello
    rep = sc.nextLine().charAt(0);

    while(rep != 'Y' && rep != 'N')
    {
        System.out.println("Incorrect Y/N");
        rep = sc.nextLine().charAt(0);

    }





    System.exit(0);


    }
}
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte