亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我正在尋找這個無限循環的替代方案

我正在尋找這個無限循環的替代方案

慕后森 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 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號