0
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,但我找不到问题出在哪里以及如何解决它。

4

4 回答 4

4

查看您的main方法,您永远不会为变量分配值sum或调用会这样做的方法。因此,您的计算器总是将结果打印0.0为双精度的默认初始化值。opp并且opp2不会自动使用,您需要实际调用它们。

于 2013-11-01T21:13:58.487 回答
2

正如许多人指出的那样 - 只需尝试使用调试器运行您的程序,然后您至少可以看到问题从哪里开始:)

ppl 关于未分配总和(仅初始化)的说法是正确的,这就是为什么您在输入的所有内容中都得到 0.0 的原因。

如果您使用调试器运行,您会注意到jz.hasNextDouble()始终返回 false 并随后jz.hasNext()返回 true,这将导致op您输入的整个表达式,此时您将离开token方法并打印您的sum

于 2013-11-01T21:27:09.517 回答
2

您的程序有几个设计问题。目前 main 将调用 token(),它设置 opp、num1 和 num2。然后它返回到 main 然后 main 打印 0。

您实际上需要对 num1 和 num2 做一些事情。根据 opp 的值让 token() 调用 opp1() 或 opp2(),或者在 token() 之后让 main 调用 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);
}

同样为了上帝的爱,请重命名所有变量和方法名称。那样的话,一切都会对你更有意义。

于 2013-11-01T21:16:20.373 回答
1

您永远不会分配sumghdopp并且opp2不会调用方法,这就是为什么

于 2013-11-01T21:16:34.077 回答