Estoy aprendiendo Java en este momento y nunca antes había usado declaraciones de cambio. Traté de ingresar una prueba encantada simple, pero algo en la declaración de cambio no funciona.
He intentado poner texto en varios puntos del programa para probar si el programa llega a ese código. Tengo una buena respuesta dentro del interruptor real, por lo que si respondo mal a la Pregunta 1, aparecerá un mensaje de texto. Pero más tarde que dentro de la declaración de cambio y ninguno de mis resultados de puntuación aparece hasta que se completan todas las iteraciones del bucle for. He intentado mover la salida "correcta/incorrecta" a varios puntos y ninguno de ellos parece funcionar.
Scanner myScanner = new Scanner(System.in); System.out.println("Enter your name!"); String name = myScanner.nextLine(); int wrongCounter = 0; boolean correctChecker = false; int score = 0; String answer; System.out.println("Welcome to the Charmed Quiz, " + name + "!"); for (int i = 0; i < 10; i++) { if (wrongCounter < 4) { switch(i) { case 0: System.out.println("Who read the spell that gave the Charmed Ones their powers?"); System.out.println("Enter your answer"); answer = myScanner.nextLine(); switch (answer) { case "Pheobe": correctChecker = true; break; default: correctChecker = false; break; } case 1: System.out .println("Who travelled to a cursed town with Prue when Pheobe was shot in a premonition?"); System.out.println("Enter your answer"); answer = myScanner.nextLine(); switch (answer) { case "Cole": correctChecker = true; break; default: correctChecker = false; break; } } if (correctChecker == true) { score++; System.out.println("Correct!"); } else { wrongCounter++; System.out.println("Incorrect!"); }Hay muchos, muchos problemas con este código. El problema principal es que break rompe la construcción más cercana que puede romper, que en su caso es el switch interno . Mientras que su intención es claramente romper con ambos. O [A] agrega otra break justo antes del case 1: declaración, o [B] usa una ruptura etiquetada; ponga algo como outer: antes del primer switch (primario/externo), y luego haga que todas esas declaraciones break outer; .
Pero, en realidad, nada de esto (ya sea el exterior o el interior) es de ninguna manera sensible en forma de interruptor. Entiendo que este es un ejercicio de aprendizaje, pero pensaría en algo más para aprender.
Además, es Phoebe, no Phoebe.
Definitivamente, esta no es la mejor manera de lograr un juego de preguntas, pero si lo está usando como un ejercicio de aprendizaje, entonces el mejor curso de acción es seguir el consejo de @rzwitserloot.
Agregue un descanso después de los casos de declaración de cambio principal en lugar de la declaración de cambio interno.
Sin embargo, no tiene ningún uso real tener una declaración de cambio interno cuando puede usar correctChecker = "Pheobe".equals(answer); para obtener un valor booleano verdadero o falso en una sola línea.
Esto solo significa que puede evitar la segunda declaración de cambio, lo que lo hace mucho menos confuso.
En conjunto, sus casos podrían verse así:
case 0: System.out.println("Who read the spell that gave the Charmed Ones their powers?"); System.out.println("Enter your answer"); answer = myScanner.nextLine(); correctChecker = "Pheobe".equals(answer); break; }En el futuro, sería mejor almacenar preguntas y respuestas en una matriz y usar el ciclo for para iterar a través de eso. Este es un buen tutorial sobre el tema.
¡Buena suerte con el resto de tu proyecto!