Начинающий ищет руководство - PullRequest
0 голосов
/ 21 апреля 2020

Я программирую очень простой c калькулятор меню, который

  1. отображает меню
  2. , выбирает пользователя и выполняет действие на основе этого выбора
  3. отображать результаты
  4. l oop обратно в меню, пока пользователь не введет 10 для выхода из l oop

Что меня смутило, так это использование оператора switch в некоторое время l oop. Ввод 10 должен выйти из программы, и это происходит, но только сначала. Во второй раз, когда он показывает меню и запрашивает ввод, 10 не выходит из программы.

также приветствуются любые другие советы

    public class MenuCalculator 
    {

    public static void main(String[] args) 
    {
        showMenu();
    }

    public static void showMenu() 
    {
        Scanner input = new Scanner(System.in);
        //menu display   
        System.out.println("Calculator Menu");
        System.out.println("---------------");
        System.out.println("1. Add two integers. ");
        System.out.println("2. Add two doubles. ");
        System.out.println("3. Subtract two integers. ");
        System.out.println("4. Subtract two doubles. ");
        System.out.println("5. Multiply two integers. ");
        System.out.println("6. Multiply two doubles. ");
        System.out.println("7. Divide two integers. ");
        System.out.println("8. Divide two douvles. ");
        System.out.println("9. Compute a factorial product of a number (n!) ");
        System.out.println("10. Exit. ");
        System.out.println(" ");
        System.out.println("Your choice?");
        int userChoice = input.nextInt();

        while (userChoice < 10) 
        {

            switch (userChoice) 
            {

                case 1:
                    System.out.println("Enter the first number * : ");
                    int addInt1 = input.nextInt();
                    System.out.println("Enter the 2nd number: ");
                    int addInt2 = input.nextInt();
                    System.out.println(add(addInt1, addInt2));
                    break;
                case 2:
                    System.out.println("Enter the first number !: ");
                    double plusDub1 = input.nextDouble();
                    System.out.println("Enter the 2nd number:  @");
                    double plusDub2 = input.nextDouble();
                    System.out.println(addDbl(plusDub1, plusDub2));
                    break;
                case 3:
                    System.out.println("Enter the first number: #");
                    int subInt1 = input.nextInt();
                    System.out.println("Enter the 2nd number: ");
                    int subInt2 = input.nextInt();
                    System.out.println(subtract(subInt1, subInt2));
                    break;
                case 4:
                    System.out.println("Enter the first number: $");
                    double subDub1 = input.nextDouble();
                    System.out.println("Enter the 2nd number: ");
                    double subDub2 = input.nextDouble();
                    System.out.println(subtractDbl(subDub1, subDub2));
                    break;
                case 5:
                    System.out.println("Enter the first number: %");
                    int multInt1 = input.nextInt();
                    System.out.println("Enter the 2nd number: ");
                    int multInt2 = input.nextInt();
                    System.out.println(multiply(multInt1, multInt2));
                    break;
                case 6:
                    System.out.println("Enter the first number: ^");
                    double multDub1 = input.nextDouble();
                    System.out.println("Enter the 2nd number: ");
                    double multDub2 = input.nextDouble();
                    System.out.println(multiplyDbl(multDub1, multDub2));
                    break;
                case 7:
                    System.out.println("Enter the first number: &");
                    int divInt1= input.nextInt();
                    System.out.println("Enter the 2nd number: ");
                    int divInt2= input.nextInt();
                    System.out.println(divide(divInt1, divInt2));
                    break;
                case 8:
                    System.out.println("Enter the first number: -");
                    double divDub1= input.nextDouble();
                    System.out.println("Enter the 2nd number: ");
                    double divDub2= input.nextDouble();
                    System.out.println(divideDbl(divDub1, divDub2));
                    break;
                case 9:
                    System.out.println("Enter a number: ");
                    int factoNum= input.nextInt();
                    System.out.println(factorialProduct(factoNum));
                    break;
                default:

            }//end switch
            showMenu();
        }//end while


    }

    public static int add(int n1, int n2) 
    {
        //declare variables       
        int sum;
        // sum and return        
        sum = n1 + n2;
        return sum;

     }

    public static double addDbl(double n1, double n2) 
    {
        //declaration
        double sum;
        // sum and return        
        sum = n1 + n2;
        return sum;

    }

    public static int subtract(int n1, int n2) 
    {
        int total;
        total = n1 - n2;
        return total;
    }

    public static double subtractDbl(double n1, double n2) 
    {
        double total;
        total = n1 - n2;
        return total;
    }

    public static int multiply(int n1, int n2) 
    {
        int total;
        total = n1 * n2;
        return total;
    }

    public static double multiplyDbl(double n1, double n2) 
    {
        double total;
        total = n1 * n2;
        return total;
    }

    public static int divide(int n1, int n2) 
    {
        int total;
        total = n1 / n2;
        return total;
    }

    public static double divideDbl(double n1, double n2) 
    {
        double total;
        total = n1 / n2;
        return total;
    }

    public static int factorialProduct(int n) 
    {
        if (n == 0) 
        {
            return 1;
        } 
        else 
        {
            return n * factorialProduct(n - 1);
        }
    }
  }

1 Ответ

0 голосов
/ 21 апреля 2020

Вы звоните showMenu из showMenu, что является рекурсией, и вам это точно здесь не нужно. Вместо этого вам нужно некоторое время l oop для получения режима и выполнения операции. Я бы сформировал код следующим образом (предупреждение - псевдокод):

public static void main() {
  while (true) {
    // display your menu
    userChoice = nextInt()
    switch (userChoice) {
      case 1:
        ...
      case 2:
        ...
      ...
      case 10:
        return;  // exits from main
    }
  }
}
...