2016-04-07 32 views
0

我想設計一個程序,它有一個菜單,並且基本上是程序處理該菜單輸入的持續時間。我有另一個菜單,可能會被另一個類調用,可能會中斷此程序的流程並調用另一個顯示另一個菜單的方法。有沒有辦法將這個控制權轉移回main中的while循環來繼續處理輸入,當從另一個類調用顯示菜單時,還是將這個完全不同地寫出來更明智?處理多個菜單輸入java - 返回while循環主?

該代碼僅僅是當前結構的一個例子。目前我已經嘗試設置一個標誌,當其他類想調用displayNewMenu,並在while循環中檢查這個標誌,並從那裏調用它,但這似乎沒有工作。

public static void main(String[] args) { 
    displayMenu(); 
    while(true) { 
     handleMenuInput(); 
} 

public void displayNewMenu() { 
} 
+0

檢查'}'我錯過了它 –

+0

@Jägermeister是什麼讓你覺得他與Swing JavaFX一起工作?我認爲他是指控制檯應用程序。 –

+0

有關控制檯程序的更正。我沒有直接從另一個類中調用displayNewMenu,它正在觸發它。我知道這個問題似乎有點奇怪,請放心,這不是一個真正的單詞程序。 – user3601148

回答

0

那麼,如果你想讓這個菜單可以隨時訪問,你將不得不做一些多線程。否則,您將無法完成其他工作,仍然能夠接受用戶輸入。

創建線程來處理用戶交互,這將包括獲取用戶輸入的掃描器,將輸出放入控制檯併爲您的工作產生線程。

你不能在單線程的環境中做到這一點。你會讓你的程序掛起。

如果你僅僅指剛要回去處理用戶輸入/改變菜單等等,你需要改變流程的位

 public void work1(){ 
     //some work 
     } 
     work2,3,4()... 

     public void menuSelector(){ 
      //get input 
      if(input=menu1){ 
      menu1(); 
      } .... 

     } 

    public void menu1(){ 
      displayMenu1(); 
      while(true){ 
      //get input 
      if(input=work1){ 
       work1(); 
      } 
      if(input=exitmenu){ 
       break; 
      } 
      } 
      menuSelector(); 
     } 

    public void menu2(){ 
      displayMenu2(); 
      while(true){ 
      //get input 
      if(input=work2){ 
       work2(); 
      } 
      if(input=exitmenu){ 
       break; 
      } 
      } 
      menuSelector(); 
     } 

我覺得你得到的idea.This將使菜單之間喲UT ojump ,並在菜單中循環。當然,odnt只是使用多個if語句,切換將在這裏合適。

+0

多線程不是這裏的問題,我只是希望能夠將控制流傳遞迴主方法中的while循環來處理displayNewMenu被調用時的輸入。 – user3601148

+0

@ user3601148已更新 –

0

如果你不是尋找一個多線程解決方案,可以考慮這種方法:

main(){ 
    while(true){ // Infinite loop to ensure that the control always comes back to display the menu. Exits only when the user selects an option to quit. 
     displayMenu(); 
     handleUserInput(); 
    } 
} 

displayMenu(){ 
    // Show menu options here: 
    // Press 1 to perform task 1. 
    // Press 2 to perform task 2. 
    // Press 3 to exit. 
} 

handleUserInput(opt){ 
    if opt == 1, perform task 1 
    else if opt == 2, perform task 2 
    else if opt == 3, exit 
    else show error "invalid input" 
} 

performtask1(){ 
    while(true){ 
     displayTask1Menu(); 
     handleTask1UserInput(); 
    } 
} 

displayTask1Menu(){ 
    // Show menu options here: 
    // Press 1 to perform sub task 1. 
    // Press 2 to perform sub task 2. 
    // Press 3 to exit to main menu. 
} 

handleTask1UserInput(){ 
    if opt == 1, perform sub task 1 
    else if opt == 2, perform sub task 2 
    else if opt == 3, exit to main menu/break; 
    else show error "invalid input" 
} 

這樣,用戶將在子菜單執行每個操作後系統將提示返回菜單。

您還可以根據用戶輸入更改菜單顯示。

+0

我不認爲是我正在尋找的。問題是displayMenu2()可以被另一個類調用,它在while循環之外。問題是,當發生這種情況時,跳回while(true)循環來處理輸入的最佳方法是什麼? – user3601148

+0

您需要將控件放在main while循環中,以使控件返回到那裏。如果您退出循環,那麼您很難再回到那裏..我更新了僞代碼以反映您可以採取的另一種方法。 – anacron

+0

您需要使用分層方法,其中您有一個 '主菜單>(子菜單1>子菜單1.1,子菜單1.2),(子菜單2>子菜單2.1,子菜單2.2),...' – anacron