我试图用三个数字和两个运算符制作算术计算器。我想遵循法律,如数学,做/,*,+, - ,相应。答案示例如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);
}
}
答案 0 :(得分:0)
您尝试将operation
用于第一次和第二次操作。当您阅读第二个操作时,您将覆盖第一个操作。你也只进行过一次手术,而不是两次手术;但显然要处理7+3*5
,您需要执行两个操作。
如果您要明确处理三个数字和两个操作,则需要单独存储操作并单独处理它们。
还要注意,您要解决的问题要求您了解order of operations(BODMAS或PEDMAS或类似情况,具体取决于您上学的地点)。 7+3*5
要求您首先评估3*5
部分,然后评估7+x
部分,以获得正确答案。但是7*3+5
需要相反的结果。
例如,如果您仅必须处理三个号码,其中包含两个运算符(例如,狭隘的学校作业),您可能会: / p>
n1
,op1
,n2
,op2
和n3
)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;)来保存第二个操作并做相应的操作。
顺便说一下,你需要更多代码来通用并正确处理所有情况(任意数量的运算符,优先级......)