Java 用“+”和“-”计算

Java 用“+”和“-”计算,java,Java,我想用java创建一个程序,它接受值并用给定的值进行数学运算 我试过了,但它只对一个运算符有效,即只有加法或减法有效,当运算符混合时,即10+20-5,第一个运算符将被新运算符替换。我希望在我的代码中找到错误,但另一种解决方案也足够了。多谢各位 import java.util.Scanner; public class Calculation { static double total; public static void main(S

我想用java创建一个程序,它接受值并用给定的值进行数学运算

我试过了,但它只对一个运算符有效,即只有加法或减法有效,当运算符混合时,即10+20-5,第一个运算符将被新运算符替换。我希望在我的代码中找到错误,但另一种解决方案也足够了。多谢各位

import java.util.Scanner;    
public class Calculation {
            static double total;
            public static void main(String args) {
    
            double number;
            String currentOperator="";
    
            int num=0;
            boolean exitCondition=!false;
            Scanner input = new Scanner(System.in);
    
            while(exitCondition) {
    
                System.out.print("Enter a number: ");
                number = input.nextDouble();
                num++;
                System.out.print("Enter an operator: ");
                String operator = input.next();
    
                if(operator.equals("+")||operator.equals("-")) {
                //To save the operator so that it doesn't get replaced.
                    currentOperator = operator;
    
                }
    
                switch (operator){
                    case "+":{
    
                            total+=number;
                            System.out.println("CURRENT TOTAL:"+total);
                            break;
                    }
    
                    case "-": {
                            if(num==1)
                                total=number;
                            else
                                total -= number;
                            System.out.println("CURRENT TOTAL:" + total);
                            break;
                    }
    
                    case "=": {
    
                        if(currentOperator.equals("+")){
    
                            total+=number;
                            System.out.println("Total is:" + total);
                            exitCondition=!true;
    
                        }
    
                        else if(currentOperator.equals("-")){
    
                            total-=number;
                            System.out.println("Total is:" + total);
                            exitCondition=!true;
    
                  }
             }
        }
    }
}

问题是您应该在操作数之前获取运算符。 在循环之前,您必须做的第一件事是获取第一个输入并将其分配给总数。 之后,在循环中,应该反转输入,并确保仅当运算符不是“=”时,才能获得另一个操作数

System.out.print("Enter an operator: ");
String operator = input.next();

if(!operator.equals("=")){
System.out.print("Enter a number: ");
number = input.nextDouble();
}
这样做不需要变量num,减法运算中也不需要控件。 如果运算符为“=”,则只需打印总数,不需要进行其他控制或操作。

Input=10+20-5

启动条件:

总数=0 当前运算符= 运算符=未知 数字=未知 首次通过循环:

数字=10 运算符=+ 设置总计=0+10 设置当前运算符=+ 第二次通过循环:

数字=20 运算符=- 集合总数=10-20 设置当前运算符=- 等等

您正在使用运算符的左侧修改总计,而不是右侧

考虑将输入读入两个数组,一个用于运算符,一个用于值

//Pseudocode

/*
Validate that value array size = operator array size + 1
Initialize total to be first value in value array
remove that value from the front of the value array

Start Loop
    read operator at front of operator array
    remove operator from front of the operator array
    read number from front of value array
    remove number from front of value array
    set total = total <switch on operator> number
End Loop

Output total
*/

我推荐这种方法的原因是,如果您在解析时进行计算,那么您将被锁定在左->右计算中…这不允许在扩展运算符集时进行操作顺序。。。如果填充数组,然后遍历,那么计算是基于数组中事物的顺序,而不是原始字符串中的顺序。。。这意味着您可以首先解析字符串以查找括号内的内容,包括指数、乘/除与加/减等。。。然后相应地填充数组

在while循环中使用for循环,并在获取输入后立即执行操作,同时将输入分配给数组解决了问题

import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String operator="+";
        double total=0;
        double arr[] = new double[2];
        boolean noExit=true;
    
        while(noExit) {
            
            System.out.println("Welcome to the Java Calculator!");
            for (int i = 0; i < 2; ) {
                System.out.print("Enter number: ");
                arr[i] = input.nextDouble();
    
                switch(operator){
                    case "+":
                        total+=arr[i];
                        System.out.println("Current Total: "+total);
                        break;
                    case "-":
                        total-=arr[i];
                        System.out.println("Current Total: "+total);
                        break;
                    case "*":
                        total*=arr[i];
                        System.out.println("Current Total: "+total);
                        break;
                    case "/":
                        total/=arr[i];
                        System.out.println("Current Total: "+total);
                        break;
                }
    
    
    
    
                System.out.print("Enter an operand (+,-,*,/,=): ");
                operator = input.next();
                
                if(operator.equals("=")){
                    System.out.println("\nTotal is: "+total);
                    noExit=false;
                    break;
                }
    
    
                }
            }
        }
    }

你有一些逻辑问题。例如,当运算符为“-”时,您总是减法,但该运算符将用于输入的下一个数字。您需要查看前面的运算符,以了解当前数字是加还是减,但是现在你用当前的一个覆盖上一个-可能尝试在switch语句之后将currentOperator的设置移动到,并使用currentOperator知道是加还是减。我希望当提问者输入代码时,他们会阅读。代码应该包括所有相关的导入语句和公共静态void main方法。这样可以很容易地复制到调试器中并帮助回答问题。@NomadMaker谢谢你的提示,我添加了import语句。你将字符串与字符进行比较,这是行不通的。