我正在寻找这种无限循环的替代方案

时间:2019-06-26 16:24:40

标签: java switch-statement infinite-loop

我在下面的代码中使用while(true)循环,但是我们已经停止使用它了。我想不出另一种方法。

我已经尝试过使用do-while循环,但这对我的情况没有帮助。

'''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.");
            }
        }

'''

代码需要拒绝任何不在切换情况下的内容...但是它还需要显示适当的消息,无论是通过函数还是通过循环本身,最终,我仍然需要循环直到输入退出选项(案例5)。

1 个答案:

答案 0 :(得分:3)

大多数长时间运行的系统都有某种顶级的“无限”循环。我看不出有什么大问题,但从政治上讲,有些人不喜欢无限循环。

如果这是您的问题,请将布尔值“ running”标志初始化为true,请使用while(running),而不是将system.exit()设置为false。应该是一样的效果。

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.
 }

从技术上讲,这并没有真正的区别,但是某些人已经受过训练,可以扫描while(true)结构并将其称为问题。

标志方法有一些轻微的优势...

  • 通过函数退出的控制流程是意外的。如果您正在以很高的级别扫描该代码,只是在寻找流控制(花括号和if / while / for / break类型构造),您将不会立即看到该循环将退出。
  • 出于相同的原因,有些静态分析工具可能会有些混乱。
  • 通常应避免使用System.exit(作为一种习惯,而不是在这种情况下)。 System.exit可以迫使容器(例如Tomcat)非正常关闭,它也可以杀死可能正在做重要事情的线程(除非您需要在命令行中返回值,这意味着您需要系统)。 exit(),但可能要使其成为main的最后一行。