2016-05-06 4 views
0

私のクラスのメニュー駆動型計算プログラムを生成しています。サブメニューが完了した後にルートメニューに戻らない理由を理解しようとしています。主要な引数が設定されていると、オプション1〜4と6は意図したとおりに正常に動作します。オプション5は、サブメニューをプルアップし、正しい応答をキューに入れますが、サブメニューのループに戻るだけです。私は何が欠けているか、プログラムを終了せずに壊れてルートに戻る方法がありますか?助けてくれてありがとう!JAVAテキストベースのメニューがルートメニューに戻らない

主な引数:

public static void main(String[] args) 
    { 
     Final_Project project = new Final_Project(); 
     int selection = 0; 
     while (selection != 6) 
     { 
     selection = project.mainMenu(); 
     if (selection == 1) 
      project.addition(); 
     else if (selection == 2) 
      project.subtraction(); 
     else if (selection == 3) 
      project.multiplication(); 
     else if (selection == 4) 
      project.division(); 
     else if (selection == 5) 
     { 
      project.subMenu(); 
      int subSelection = 0; 
      while (subSelection != 2) 
      { 
       subSelection = project.subMenu(); 
       if (subSelection == 1) 
        project.displayAdditionTable(); 
       else if (subSelection == 2) 
        project.displayMultiplicationTable(); 
       else 
        System.out.println("Invalid menu options selected, try again\n"); 
      } 
     } 
     else if (selection == 6) 
      project.exitProgram(); 
     else 
      System.out.println("Invalid menu options selected, try again.\n"); 
     } 
    } 

メインメニュー:

private int mainMenu() 
    { 
     Scanner kb = new Scanner(System.in); 
     System.out.println("Welcome to the Java Calculator!\n"); 
     System.out.println("MAIN MENU\n"); 
     System.out.println("1. Addition"); 
     System.out.println("2. Subtraction"); 
     System.out.println("3. Multiplication"); 
     System.out.println("4. Division"); 
     System.out.println("5. Display Study Tables"); 
     System.out.println("6. Exit\n"); 
     System.out.println("Please select an option from the menu:"); 

     return kb.nextInt(); 
    } 

サブメニュー:

private int subMenu() 
    { 
     Scanner kb = new Scanner(System.in); 
     System.out.println("Display Study Tables selected:\n"); 
     System.out.println("SUB MENU\n"); 
     System.out.println("1. Addition"); 
     System.out.println("2. Multiplication"); 
     System.out.println("Please select an option from the menu:"); 

     return kb.nextInt(); 
    } 

表プレースホルダの例:

private void displayAdditionTable() 
    { 
     System.out.println("Display Study Tables selected:\n");  
    } 

答えて

0

あなたの選択== 5ブロックにはいくつか問題があります。

  • ループの開始時にproject.subMenu()を呼び出しますが、戻り値は何もしません。だから最小限のメニューは2回表示されます。
  • subSelection == 2のときだけループを抜けます。したがって、サブメニューは、ユーザーが乗算オプションを選択するまで表示され続けます。

これはクラスのためのコードなので、コードを書く必要はありませんが、ループを含むすべてのサブメニューコードをsubMenu()メソッドに移動できるかどうかがわかりますメインループからproject.subMenu()を呼び出します。さもなければ、メインループは、サブメニューのオプションが何であるか、何が返されるべきかについての情報をあまりにも多く知っていなければならない。これは不正なカプセル化である。

関連する問題