1
votes

[BEGINNER] a configuré une boucle dans le commutateur par défaut

En tant que premier petit projet, j'essaie de créer un quiz. J'ai écrit la méthode pour générer des questions et des réponses. J'essaie maintenant de forcer l'utilisateur à entrer 1 ou 2 pour continuer et faire une boucle alors qu'il ne le fait pas. Je suis un peu perdu à ce stade. Est-ce que je rate quelque chose de vraiment évident?

public static boolean generateQuestion2(String question, String answer1, String answer2) {
    boolean bingo;
    System.out.println(question);
    System.out.println("(1) " + answer1);
    System.out.println("(2) " + answer2); //bingo

    Scanner scan1 = new Scanner(System.in);
    int antwort = scan1.nextInt();

    switch (antwort) {
        case 1:
            System.out.println("Falsch...");
            return bingo = false;

        case 2:
            System.out.println("Richtig!");
            return bingo = true;

        default:
            // Here I intend to loop while antwort != 1 and 2
            while (antwort != 1 && antwort != 2) {
                System.out.println(" Bitte 1 doer 2 eintippen");
                return bingo = false;
            }
            return bingo = false;
    }
}


1 commentaires

le temps que vous avez écrit n'est pas pertinent. le while devrait contenir le nextInt () et tout le bloc de commutation


3 Réponses :


1
votes

Il n'y a rien dans la boucle pour modifier antwort , vous devez le relire depuis scan1 .

De plus, vous retournez inconditionnellement de la fonction à l'intérieur de la fonction. Cela reviendra immédiatement .

Et la boucle devrait probablement être autour de tout le commutateur .

Enfin, pour seulement deux valeurs, je préférerais utiliser un simple if ... else if .


3 commentaires

Merci pour la contribution!


Ouais, j'ai pensé à utiliser if ... else, mais potentiellement je veux avoir jusqu'à quatre options de réponse, un commutateur semblait avoir plus de potentiel pour se développer.


@Buddy Ensuite, un commutateur a plus de sens.



0
votes

Vous revenez dans votre boucle, vous quitterez donc la méthode et la boucle s'arrêtera. Ce que vous voulez dans cette boucle, c'est d'attendre l'entrée utilisateur int antwort = scan1.nextInt (); . Lorsque l'entrée est reçue, vous souhaitez revenir à votre commutateur.

Quelque chose comme ça ...

// here we wait for input
int antwort = scan1.nextInt();
while (true) {
  if (antwort == 1 || antwordt == 2) {
    return processAntwort(antwort);
  } else {
    System.out.println(" Bitte 1 doer 2 eintippen");
    // here again we wait for input
    antwort = scan1.nextInt();
  }
}
private boolean processAntwort(int antwort) {
  return antwort == 2;
}


0 commentaires

0
votes

Procédez comme suit:

x
(1) y
(2) z
2
Richtig!
true

Un exemple d'exécution:

x
(1) y
(2) z
1
Falsch...
false

Un autre exemple exécuter:

x
(1) y
(2) z
4
 Bitte 1 doer 2 eintippen
3
 Bitte 1 doer 2 eintippen
1
Falsch...
false

Un autre exemple d'exécution:

x
(1) y
(2) z
4
 Bitte 1 doer 2 eintippen
3
 Bitte 1 doer 2 eintippen
2
Richtig!
true

Un autre exemple d'exécution:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(generateQuestion2("x", "y", "z"));
    }

    public static boolean generateQuestion2(String question, String answer1, String answer2) {
        boolean bingo = false;
        boolean valid = true;
        System.out.println(question);
        System.out.println("(1) " + answer1);
        System.out.println("(2) " + answer2); // bingo

        Scanner scan1 = new Scanner(System.in);
        int antwort = scan1.nextInt();
        do {
            valid = true;
            switch (antwort) {
            case 1:
                System.out.println("Falsch...");
                bingo = false;
                break;
            case 2:
                System.out.println("Richtig!");
                bingo = true;
                break;
            default:
                valid = false;
                System.out.println(" Bitte 1 doer 2 eintippen");
                antwort = scan1.nextInt();
            }
        } while (!valid);
        return bingo;
    }
}


0 commentaires