算术java计算器[解决方案]

时间:2017-08-02 11:15:27

标签: java

我试图用三个数字和两个运算符制作算术计算器。我想遵循法律,如数学,做/,*,+, - ,相应。答案示例如7 + 3 * 5 = 22 没有必要帮忙!

package first;
import java.util.*;

public class FirstJUnit {

static double input1, input2, input3, result = 0.0;
static String o1, o2;

public static void main(String args[]) {

    Scanner calcu = new Scanner(System.in);

    System.out.println("Enter your number:  ");
    input1 = calcu.nextDouble();
    o1 = calcu.next();
    input2 = calcu.nextDouble();
    o2 = calcu.next();
    input3 = calcu.nextDouble();

        if(o2.equals("/")) {
        input2 = input2/input3;
        }else if(o2.equals("*")) {
        input2 = input2*input3;
        }else if(o2.equals("+")) {
        input2 = input2+input3;
        }else if(o2.equals("-")) {
        input2 = input2-input3;
        }

        if(o1.equals("/")) {
        input1 = input1/input2;
        }else if(o1.equals("*")) {
        input1 = input1*input2;
        }else if(o1.equals("+")) {
        input1 = input1+input2;
        }else if(o1.equals("-")) {
        input1 = input1-input2;
        }

    result += input1;
    System.out.println(result);

}


}

3 个答案:

答案 0 :(得分:0)

您尝试将operation用于第一次和第二次操作。当您阅读第二个操作时,您将覆盖第一个操作。你也只进行过一次手术,而不是两次手术;但显然要处理7+3*5,您需要执行两个操作。

如果您要明确处理三个数字和两个操作,则需要单独存储操作并单独处理它们。

还要注意,您要解决的问题要求您了解order of operations(BODMAS或PEDMAS或类似情况,具体取决于您上学的地点)。 7+3*5要求您首先评估3*5部分,然后评估7+x部分,以获得正确答案。但是7*3+5需要相反的结果。

例如,如果您必须处理三个号码,其中包含两个运算符(例如,狭隘的学校作业),您可能会: / p>

  • 收集所有数字和运算符(可能是n1op1n2op2n3
  • 如果op2的优先级高于op1
    • 评估n2 op2 n3,保存结果(可能是r),然后执行n1 op1 r
  • 否则:
    • 评估n1 op1 n2,保存结果(可能是r),然后执行r op2 n3
  • 显示最终结果

...但细节将取决于作业的细节。

答案 1 :(得分:0)

您完全无法实现(a)涉及第三个数字n3的任何评估,(b)保存和使用第二个运算符,最重要的是(c)运算符优先级。你需要把它扔掉,然后查看Dijkstra Shunting-yard算法,或者递归下降表达式解析'。

答案 2 :(得分:-1)

您的实施不正确,因为您使用相同的变量来保存输入

Scanner op = new Scanner(System.in);
System.out.println("Enter your operation");
operation = op.next(); // <-- This value is never use, see below

System.out.println("Enter second number");
n2 = scannerObject. nextInt();

Scanner op1 = new Scanner(System.in);
System.out.println("Enter your operation");
operation = op1.next(); // <-- You save this value in same variable operation, the previous value is overwritten

System.out.println("Enter third number");
n3 = scannerObject. nextInt(); // <-- This number is never use after in your code

您可以使用另一个变量(例如&#34; operation2&#34;)来保存第二个操作并做相应的操作。

顺便说一下,你需要更多代码来通用并正确处理所有情况(任意数量的运算符,优先级......)