为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2023-02-23 10:54:20
我在下面的代码中使用了一个 while(true) 循环,但我们已经停止使用它了。我想不出另一种方法来做到这一点。我试过使用 do-while 循环,但这对我的情况没有帮助。'''javawhile(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.");            }        }'''代码需要拒绝任何不在 switch-case 中的东西......但它还需要显示适当的消息,无论是通过函数还是来自循环本身,最终,我仍然需要它循环直到退出选项(案例 5)被输入。
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

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


如果这是您的问题,请将布尔“运行”标志初始化为 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) 构造的培训,并将其称为问题。


标志方法有几个 SLIGHT 优势......


通过函数退出的控制流是意想不到的。如果您在非常高的级别扫描该代码只是为了寻找流控制(大括号和 if/while/for/break 类型构造),您不会立即看到该循环将永远退出。

出于同样的原因,一些静态分析工具可能会有些混乱。

通常应避免使用 System.exit(作为习惯问题,在本例中不是特指)。System.exit 可以强制容器(如 Tomcat)异常关闭,它还可以杀死可能正在做一些重要事情的线程(除非你需要向命令行返回一个值,这意味着你需要一个系统。 exit() 但可能想让它成为你的 main.exit 的最后一行。


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信