【问题标题】:Calculator in Java: How to return to the main menu?Java中的计算器:如何返回主菜单?
【发布时间】:2016-05-26 13:38:23
【问题描述】:

我用 Java 编写了一个计算器程序,在用户完成工作后, 我希望发生这种情况: 我会问他是否想做更多的操作,如果是,程序应该返回选择输入。如果不是,则中断程序。 我应该在代码中添加哪些行?这是我的计算程序:

import java.util.*;
class calc
{
    public static void main(String ar[])
    {
        char choice;
        Scanner in = new Scanner(System.in);
        System.out.println("WELCOME TO SHREYDAN'S CALC 1.0");
        System.out.println(" ");
        System.out.println("YOU CAN DO THE FOLLOWING:");
        System.out.println("+: ADDITION");
        System.out.println("-: SUBTRACTION");
        System.out.println("*: PRODUCT");
        System.out.println("/: QUOTIENT");
        System.out.println("#: SQUARE ROOT");
        System.out.println("^: POWER");
        System.out.println("$: ROUND OFF");
        System.out.println("!: FACTORIAL");
        System.out.println(" ");
        System.out.println("ENTER CHOICE");
        choice=in.next().charAt(0);
        switch(choice)
        {
            case '+':
                System.out.println("ENTER 2 NUMBERS, USER");
                double a=in.nextDouble();
                double b=in.nextDouble();
                System.out.println("SUM = "+(a+b));
                break;
            case '-':
                System.out.println("ENTER 2 NUMBERS, USER");
                double c=in.nextDouble();
                double d=in.nextDouble();
                System.out.println("SUBTRACTING "+d+" FROM "+c+" ... DIFFERENCE = "+(c-d));
                break;
            case '*':
                System.out.println("ENTER 2 NUMBERS, USER");
                double e=in.nextDouble();
                double f=in.nextDouble();
                System.out.println("PRODUCT = "+(e*f));
                break;
            case '/':
                System.out.println("ENTER 2 NUMBERS, USER");
                double g=in.nextDouble();
                double h=in.nextDouble();
                System.out.println("DIVIDING "+g+" BY "+h+" = "+(g/h));
                break;
            case '#':
                System.out.println("ENTER NO. FOR SQAURE ROOT:");
                double sqrt=in.nextDouble();
                System.out.println("SQUARE ROOT OF "+sqrt+" = "+Math.sqrt(sqrt));
                break;
            case '^':
                System.out.println("ENTER BASE, USER");
                double base=in.nextDouble();
                System.out.println("ENTER POWER, USER");
                double power=in.nextDouble();
                System.out.println(base+" RAISED TO POWER "+power+" = "+Math.pow(base,power));
                break;
            case '$':
                System.out.println("ENTER DECIMAL VALUES TO ROUND OFF");
                double deci=in.nextDouble();
                System.out.println("THE NEAREST ROUND OFF = "+Math.round(deci));
                break;
            case '!':
                System.out.println("ENTER A NO. FOR FACTORIAL:");
                int fact=in.nextInt();
                int factorial=1;
                for(int i=fact; i>=1;i--)
                    factorial=factorial*i;
                System.out.println(fact+"! = "+factorial);
                break;
            default:
                System.out.println("WRONG CHOICE USER");
        }
    }
}

【问题讨论】:

    标签: java menu switch-statement


    【解决方案1】:

    while 循环是解决此类问题的最佳选择,只需考虑一个用户可以选择切换布尔条件的条件。

    例如,如果用户在“继续操作”选项中选择否,则将布尔值切换为 false 并退出 while 循环以结束程序。

    【讨论】:

      【解决方案2】:

      您需要将程序逻辑包装在一个循环中。 尝试使用 while 循环

      public static void main(String args[])
      {
          boolean doContinue = true;
          while(doContinue){
              char choice;
              Scanner in = new Scanner(System.in);
              //program logic
              //when the user enters a command to end
              // set continue=false
      
          }
      }
      

      【讨论】:

      • 恐怕continue 是保留关键字,这段代码无法编译。顺便说一句,你甚至不需要这个变量,你可以使用break 退出循环。
      • 伪代码实际上没有保留字。不过,在这个主题上,他们使用 switch 语句,使用“break”关键字退出循环会使事情变得更加混乱(阅读)。
      • 您应该编写伪代码或 Java 代码。如果你写的是前者,不要使用public static void main(String args[])之类的东西,一般要明确表示是伪代码。关于break 的好点,但是您可以使用标签。
      • while(true) 更难弄清楚发生了什么。 while(someCondition) 给了我一些东西来查看代码。我可以找到 someCondition 发生变化的所有地方,找到“break”会更难。
      【解决方案3】:

      也许将整个程序放在一个 while 循环中,并带有一个继续运行 bool 条件,当他们想退出时可以将其设置为 false

      【讨论】:

        【解决方案4】:

        您可以尝试以下方法:

        import java.util.*;
        
        class calc {
            public static void main(String ar[]) {
                char choice;
                Scanner in = new Scanner(System.in);
                System.out.println("WELCOME TO SHREYDAN'S CALC 1.0");
                System.out.println(" ");
        
                boolean loop = true;
                while (loop) {
                    System.out.println("YOU CAN DO THE FOLLOWING:");
                    System.out.println("+: ADDITION");
                    System.out.println("-: SUBTRACTION");
                    System.out.println("*: PRODUCT");
                    System.out.println("/: QUOTIENT");
                    System.out.println("#: SQUARE ROOT");
                    System.out.println("^: POWER");
                    System.out.println("$: ROUND OFF");
                    System.out.println("!: FACTORIAL");
                    System.out.println(" ");
                    System.out.println("ENTER CHOICE");
                    choice = in.next().charAt(0);
                    switch (choice) {
                        case '+':
                            System.out.println("ENTER 2 NUMBERS, USER");
                            double a = in.nextDouble();
                            double b = in.nextDouble();
                            System.out.println("SUM = " + (a + b));
                            break;
                        case '-':
                            System.out.println("ENTER 2 NUMBERS, USER");
                            double c = in.nextDouble();
                            double d = in.nextDouble();
                            System.out.println("SUBTRACTING " + d + " FROM " + c + " ... DIFFERENCE = " + (c - d));
                            break;
                        case '*':
                            System.out.println("ENTER 2 NUMBERS, USER");
                            double e = in.nextDouble();
                            double f = in.nextDouble();
                            System.out.println("PRODUCT = " + (e * f));
                            break;
                        case '/':
                            System.out.println("ENTER 2 NUMBERS, USER");
                            double g = in.nextDouble();
                            double h = in.nextDouble();
                            System.out.println("DIVIDING " + g + " BY " + h + " = " + (g / h));
                            break;
                        case '#':
                            System.out.println("ENTER NO. FOR SQAURE ROOT:");
                            double sqrt = in.nextDouble();
                            System.out.println("SQUARE ROOT OF " + sqrt + " = " + Math.sqrt(sqrt));
                            break;
                        case '^':
                            System.out.println("ENTER BASE, USER");
                            double base = in.nextDouble();
                            System.out.println("ENTER POWER, USER");
                            double power = in.nextDouble();
                            System.out.println(base + " RAISED TO POWER " + power + " = " + Math.pow(base, power));
                            break;
                        case '$':
                            System.out.println("ENTER DECIMAL VALUES TO ROUND OFF");
                            double deci = in.nextDouble();
                            System.out.println("THE NEAREST ROUND OFF = " + Math.round(deci));
                            break;
                        case '!':
                            System.out.println("ENTER A NO. FOR FACTORIAL:");
                            int fact = in.nextInt();
                            int factorial = 1;
                            for (int i = fact; i >= 1; i--)
                                factorial = factorial * i;
                            System.out.println(fact + "! = " + factorial);
                            break;
                        default:
                            System.out.println("WRONG CHOICE USER");
                    }
                    System.out.println("Want to calculate more?Y/N");
                    loop = in.next().charAt(0) == 'Y';
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-03
          • 1970-01-01
          相关资源
          最近更新 更多