简体   繁体   English

简单计算器操作

[英]Simple Calculator Operation

I am attempting to simplify my long code of a calculator program, but I have a road block. 我试图简化我的计算器程序的长代码,但我有一个障碍。 I have a new else if statement for each calculator operator, but what I want to do is allow the user to manually type in, on one line, the entire operation they would like to perform and have the code compute it. 我为每个计算器操作员都有一个新的if语句,但我想要做的是允许用户在一行上手动输入他们想要执行的整个操作并让代码计算它。

Here's what I have: 这就是我所拥有的:

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");

This is what I want the output to be: 这就是我想要的输出:

Enter operation:
4 * 6
4 * 6 = 24

Should be able to enter any operation here on one line. 应该可以在这一行输入任何操作。 I am not asking you to write my calculator for me, I am asking how to allow the computer to read in the entire operation off one line and compute it, then print it. 我不是要求你为我写我的计算器,我问的是如何允许计算机读取一行的整个操作并计算它,然后打印它。

If you use scanner readLine then you can read a whole line 如果您使用扫描仪readLine,那么您可以读取整行

eg 例如

 4 * 6

This line can then be split to get three tokens 然后可以拆分该行以获得三个令牌

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

then you can see what operation to do based upon token[1] 然后你可以看到基于令牌[1]的操作

 if (token[1].equals ("-") {

      //lets minus token[2] from token[0]
      // need to convert String to Number
 }

You can use String.split and store it in an array. 您可以使用String.split并将其存储在数组中。 Then it will return an array of string, parse those back to integers. 然后它将返回一个字符串数组,将它们解析回整数。 the do the operation you want. 做你想要的操作。 The x variable will be the result. 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);
    } 

... And so on. ... 等等。

You could try parsing the line using a Pattern object, something like this: 您可以尝试使用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
}

Have a look at the javadoc, as I'm not sure if I used the correct method names and the like, just tried to illustrate the idea... 看看javadoc,因为我不确定我是否使用了正确的方法名称等,只是试图说明这个想法......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM