【问题标题】:Simple Calculator Operation简单的计算器操作
【发布时间】:2014-04-15 20:49:20
【问题描述】:

我正在尝试简化我的计算器程序的长代码,但我遇到了障碍。我对每个计算器运算符都有一个新的 else if 语句,但我想做的是允许用户在一行上手动输入他们想要执行的整个操作并让代码计算它。

这是我所拥有的:

do {
        System.out.println("What function would you like to perform?");
        System.out.print("Exit Calculator (Q), Add (+), Subtract (-), Multiply (x), Divide (/): ");
        maininput = in.next();

        if (maininput.equals("+")) {
            System.out.print("Enter the first number to add: ");
            num1 = in.nextDouble();
            System.out.print("Enter the second number to add: ");
            num2 = in.nextDouble();
            System.out.println();

            answer = num1 + num2;

            System.out.println(num1 + " + " + num2 + " = " + answer);
            System.out.println();
        }
        else if (maininput.equals("-")) {
            System.out.print("Enter the first number to subtract: ");
            num1 = in.nextDouble();
            System.out.print("Enter the second number to subtract: ");
            num2 = in.nextDouble();
            System.out.println();

            answer = num1 - num2;

            System.out.println(num1 + " - " + num2 + " = " + answer);
            System.out.println();
        }
        else if(maininput.equals("x")) {
            System.out.print("Enter the first number to multiply: ");
            num1 = in.nextDouble();
            System.out.print("Enter the second number to multiply: ");
            num2 = in.nextDouble();
            System.out.println();

            answer = num1 * num2;

            System.out.println(num1 + " x " + num2 + " = " + answer);
            System.out.println();
        }
        else if(maininput.equals("/")) {
            System.out.print("Enter the first number to divide: ");
            num1 = in.nextDouble();
            do {
                System.out.print("Enter the second number to divide: ");
                num2 = in.nextDouble();
                System.out.println();
                if (num2 == 0) {
                    System.out.println("Cannot divide by 0!  Please enter a different number.");
                }
            } while (num2 == 0);

            answer = num1 / num2;

            System.out.println(num1 + " / " + num2 + " = " + answer);
            System.out.println();
        }
        else if(maininput.equals("Q") || maininput.equals("q") || maininput.equals("EXIT") || maininput.equals("exit")) {
            in.close();
            System.exit(0);
        }
        else {
            System.out.println(maininput + " is not a valid operand.  Please try again.");
            System.out.println();
        }
    } while (maininput != "Q" && maininput != "q");

这就是我想要的输出:

Enter operation:
4 * 6
4 * 6 = 24

应该可以在一行中输入任何操作。我不是要你给我写我的计算器,我是问如何让计算机从一行中读取整个运算并计算出来,然后打印出来。

【问题讨论】:

    标签: java math calculator


    【解决方案1】:

    如果你使用扫描仪 readLine 那么你可以读取整行

    例如

     4 * 6
    

    然后可以拆分此行以获得三个标记

     String tokens [] = line.split (" ");
    

    然后就可以看到根据token[1]做了什么操作

     if (token[1].equals ("-") {
    
          //lets minus token[2] from token[0]
          // need to convert String to Number
     }
    

    【讨论】:

      【解决方案2】:

      您可以使用 String.split 并将其存储在数组中。然后它将返回一个字符串数组,将它们解析回整数。做你想要的操作。 x 变量将是结果。

          if(maininput.contains("+")) {
              String[] stringarr = string.split("\\+");
              int x = Integer.parseInt(stringarr[0])  +  Integer.parseInt(stringarr[1]);
              System.out.println(stringarr[0] + " + " + stringarr[1] + " = " + x);
          } else if(maininput.contains("-")) {
              String[] stringarr = string.split("\\-");
              int x = Integer.parseInt(stringarr[0])  -  Integer.parseInt(stringarr[1]);
              System.out.println(stringarr[0] + " - " + stringarr[1] + " = " x);
          } 
      

      ...等等。

      【讨论】:

        【解决方案3】:

        您可以尝试使用 Pattern 对象解析行,如下所示:

        Pattern opPattern = Pattern.compile("(\\d+) *([+-*/]) *(\\d+)");
        Matcher matcher = opPattern.matcher(userLine);
        if(matcher.find()) {
            int op1 = Integer.toValue(matcher.group(1));
            int op2 = Integer.toValue(matcher.group(3));
            String op = matcher.group(2);
        
            if(op.equals("+")) {
                // do + op ...
            } else ... {
                // etc...
            }
        
        } else {
            // error in line, not the form of an operation
        }
        

        看一下javadoc,因为我不确定我是否使用了正确的方法名称等,只是试图说明这个想法......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 2015-04-04
          • 2011-02-13
          • 2014-02-22
          • 2013-06-27
          • 1970-01-01
          相关资源
          最近更新 更多