package calculator;
import java.util.Scanner;
/**
* @author zhoushi15
*/
public class Calculator {
public static double num1;
public static double num2;
public static String opp;
/**
* @param args the command line arguments
*/
public static double sum;
public static void main(String[] args) {
// TODO code application logic here
boolean quit;
String calculator;
String exp;
System.out.print("Welcome to the AP Computer Science calculator!!");
Scanner input = new Scanner(System.in);
boolean calc = false;
while (calc == false) {
System.out.print("Enter an expression, or quit to exit: ");
exp = input.nextLine();
if (exp.equalsIgnoreCase("quit")) {
System.out.println("Thanks for stopping by!");
calc = true;
} else {
token(exp);
System.out.println(exp + "=" + sum);
}
}
}
public static void token(String x) {
Scanner jz = new Scanner(x);
if (jz.hasNextDouble()) {
if (jz.hasNextDouble()) {
num1 = jz.nextDouble();
} else {
System.out.println("error! It is not a number.");
}
if (jz.hasNext()) {
opp = jz.next();
}
if (jz.hasNextDouble()) {
num2 = jz.nextDouble();
}
} else if (jz.hasNext()) {
if (jz.hasNext()) {
opp = jz.next();
}
if (jz.hasNextDouble()) {
num1 = jz.nextDouble();
}
}
}
public static void opp(double num1, String opp, double num2) {
if (opp.equals("+")) {
sum = num1 + num2;
} else if (opp.equals("-")) {
sum = num1 - num2;
} else if (opp.equals("*")) {
sum = num1 + num2;
} else if (opp.equals("/")) {
sum = num1 / num2;
}
}
public static void opp2(String opp, double num1) {
if (opp.equals("|")) {
sum = Math.abs(num1);
} else if (opp.equals("v")) {
sum = Math.sqrt(num1);
} else if (opp.equals("~")) {
sum = Math.round(num1);
} else if (opp.equals("s")) {
sum = Math.sin(num1);
} else if (opp.equals("c")) {
sum = Math.cos(num1);
} else if (opp.equals("t")) {
sum = Math.tan(num1);
}
}
}
我的代码 不是 给出答案。例如,我的输入是4 + 5,然后输出是0.0,但我找不到问题的位置以及如何解决它。
答案 0 :(得分:4)
看一下你的main
方法,你永远不会为变量sum
赋值或调用一个可以这样做的方法。因此,您的计算器始终将结果打印为0.0
,这是双打的默认初始化值。 <{1}}和opp
不会自动使用,您需要实际调用它们。
答案 1 :(得分:2)
您的程序有几个设计问题。目前main将调用token(),它设置opp,num1和num2。然后它返回main,然后主打印0。
你需要实际使用num1和num2做一些事情。要么令牌()根据opp的值调用opp1()或opp2(),要么在令牌()之后主调用opp1()或opp2()。
else {
token(exp);
System.out.println(exp + "=" + sum);
}
代替
else{
token(exp);
if(opp == "+"){
sum = opp(num1, opp, num2);
}
else{
sum = opp2(num1, num2);
}
System.out.println(exp + "=" + sum);
}
同样对于上帝的爱,请重命名所有变量和方法名称。一切都会对你更有意义。
答案 2 :(得分:2)
正如许多人指出的那样 - 只是尝试使用调试器运行程序,然后你可以看到至少问题从哪里开始:)
ppl对未被分配的总和(仅初始化)的说法是正确的,这就是为什么在输入的所有内容中得到0.0的原因。
如果您使用调试器运行,您会注意到jz.hasNextDouble()
始终返回false,随后jz.hasNext()
返回true,这导致op
成为您输入的整个表达式,并且这一点,您将离开token
方法并打印sum
答案 3 :(得分:1)
您永远不会分配sum
ghd opp
并且未调用opp2
方法,这就是原因