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;
}
}
3 Réponses :
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 .
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.
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;
}
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;
}
}
le temps que vous avez écrit n'est pas pertinent. le while devrait contenir le nextInt () et tout le bloc de commutation