[英]Handling multiple menu inputs java - returning to while loop in main?
我正在嘗試設計一個具有菜單的程序,並且該程序在整個過程中都會處理該菜單的輸入。 我有另一個菜單,該菜單可能會被另一個類調用,這可能會中斷該程序的流程並調用另一個方法,該方法將顯示另一個菜單。 當從另一個類調用顯示菜單時,是否有辦法將此控件傳遞回main內部的while循環以繼續處理輸入,還是完全不同地編寫此控件更明智?
該代碼僅是當前結構的一個示例。 目前,我已經嘗試在其他類想要調用displayNewMenu時設置一個標志,並在while循環中檢查該標志,然后從那里調用它,但這似乎不起作用。
public static void main(String[] args) {
displayMenu();
while(true) {
handleMenuInput();
}
public void displayNewMenu() {
}
好吧,如果您希望一直可以訪問此MENU,則必須做一些多線程處理。 否則,您將無法做其他工作並且仍然能夠接受用戶輸入。
創建線程來處理用戶交互,這將包括掃描器,該掃描器獲取用戶輸入,將輸出放入控制台,並為您的工作生成線程。
您不能在單線程環境中執行此操作。您將使程序掛起。
如果您想返回以處理用戶輸入/更改菜單等,則需要稍微更改一下流程
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();
}
我想你明白了,這將允許您在菜單之間進行跳轉,並在菜單內循環。當然,odnt只需使用多個if語句,在此處進行切換即可。
如果您不希望使用多線程解決方案,請考慮以下方法:
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"
}
這樣,在子菜單中執行每個操作后,將提示用戶返回菜單。
您還可以根據用戶輸入更改菜單顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.