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

算术java计算器[找到解决方案],java,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[]) {

我想做一个有三个数字和两个运算符的算术计算器。我想遵循数学中的规律,相应地做/,*,+,-。答案示例,如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);

}


}

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

如果要显式处理三个数字和两个操作,则需要分别存储这些操作并分别处理它们

还要注意的是,你要解决的问题需要你意识到(BODMAS或PEDMAS或类似的,取决于你在哪里上学)<代码>7+3*5要求您首先计算
3*5
部分,然后计算
7+x
部分,以获得正确答案。但是
7*3+5
要求相反

例如,如果你只需要处理三个数字,中间有两个运算符(例如,一个聚焦范围窄的学校作业),你可能:

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

…但详细信息将取决于分配的详细信息。

您完全未能实施(a)涉及第三个数字的任何评估
n3
,(b)保存和使用第二个运算符,最重要的是(c)运算符优先级。您需要抛开这一切,查找Dijkstra调车场算法或“递归下降表达式解析”。

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

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
Scanner op=新扫描仪(System.in);
System.out.println(“输入您的操作”);

operation=op.next();//到目前为止,解决这个问题的最好方法是使用IDE中内置的调试器进行调试;更多信息:使用调试器不是一项高级技能;这是任何初学者都应该首先学习的东西之一,然后作为第一个学习的东西。你正在阅读三个数字和两个运算符,但是你覆盖了你阅读的第一个运算符,并且在计算中忽略了n3。因此,对于
7+3*5
计算
7*3
。你必须重新考虑你的逻辑。你正在覆盖你的运算变量,所以只有*被取,给你7*3=21。就像建议的那样,逐行调试代码,一些重写是必要的;您的讲师、教程或课程将涵盖必要的主题,使您能够做到这一点。复习你的课程材料、课堂笔记等。那里会有适用的信息。提示:只使用一个
扫描仪
,无需创建更多,因为从同一输入流读取