Estoy usando un bucle (verdadero) para el siguiente código, pero nos han detenido a usarlo. No puedo pensar en otra forma de hacer esto.

He intentado usar un bucle DO-WHILE, pero no ayuda a mi situación aquí.

'''Java

while(true){
            System.out.println("\nSelect the number of the Option you wish to carry out:\n    1) Enter Scores\n    2) Find Golfer\n    3) Display Scoreboard\n    4) Edit Scoresheet\n    5) Exit\n ");
            userChoice = integerVerify(); //Used to verify whether user input is a valid number
            switch (userChoice) {

                case 1:
                    System.out.println("Please enter the scores in the following order");
                    displayPlayers();   //Displays scoreboard to help users enter player scores in order.
                    addScores();    //Used to verify whether user input is a valid String
                    break;

                case 2:
                    System.out.println("**********PLEASE ENTER THE NAME OF THE PLAYER YOU WISH TO FIND**********");
                    findPlayer();
                    break;

                case 3:
                    displayPlayers();
                    break;

                case 4:
                    options();
                    break;

                case 5:
                    System.out.println("Are you sure you wish to exit?");
                    confirm = stringVerify();
                    if (confirm.equalsIgnoreCase("yes") || confirm.equalsIgnoreCase("y")) {
                        System.out.println("Thank you for using our application.");
                        System.out.println("Exiting");
                        System.exit(0);
                    }
                    break;

                default:
                    System.out.println("Please enter an appropriate option.");
            }
        }

'''

El código debe rechazar cualquier cosa que no esté en el caso, pero también necesita mostrar un mensaje apropiado, ya sea a través de una función o desde el bucle en sí y, en última instancia, todavía lo necesito en la opción de salida hasta la opción de salida (Caso 5) se ingresa.

1
AiSirachcha21 26 jun. 2019 a las 19:24

1 respuesta

La mejor respuesta

La mayoría de los sistemas de larga duración tienen un bucle "infinito" de nivel superior de algún tipo. No veo un gran problema con esto, pero políticamente a algunas personas no les gustan los bucles infinitos.

Si ese es su problema, inicialice una bandera de "ejecución" booleana a VERDADERO, use mientras (ejecute) y en lugar de System.exit () se está ejecutando a FALSO. Debe ser el mismo efecto.

public static void main(String[] s)
{
    Boolean running=true;
    while(running) {        
         switch() {
         ...
             case 5:
               ...
                if(exitConditionsMet) 
                    running=false;
          …
          }         
     }
     return; // Just let main return to exit program.
 }

Técnicamente, no hay una diferencia real, pero algunas personas han sido entrenadas para escanear para que (verdaderas) construyen y lo llaman un problema.

Hay una pareja ligeras ventajas para el enfoque de la bandera ...

  • El flujo de control de salida a través de una función es inesperado. Si está escaneando ese código en un nivel muy alto, solo busca control de flujo (tirantes y construcciones tipo IF / WHILE / FOR / ROTT), no vería de inmediato que ese bucle saldría.
  • Algunas herramientas de análisis estático pueden estar ligeramente confundidas por la misma razón.
  • Generalmente, se debe evitar el sistema (como una cuestión de hábito, no en este caso específicamente). System.exit puede forzar los contenedores (como Tomcat) para apagarse de manera anormal, también puede matar hilos que podrían estar en medio de hacer algo importante (excepto cuando necesite devolver un valor a la línea de comandos, lo que significa que necesita un sistema. Salida () pero probablemente quiera que sea la última línea de su principal.
4
Bill K 26 jun. 2019 a las 17:59