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

2

多くの人が指摘したように、デバッガーでプログラムを実行してみてください。そうすれば、少なくとも問題がどこから始まるかがわかります:)

割り当てられていない合計 (初期化のみ) について ppl が言ったことは真実であり、それが、入力したすべての結果として 0.0 を取得している理由です。

デバッガーで実行すると、jz.hasNextDouble()常に false を返し、その後jz.hasNext()true を返し、op入力した式全体になることに気付くでしょう。その時点で、tokenメソッドを離れて、sum

于 2013-11-01T21:27:09.517 に答える
2

あなたのプログラムにはいくつかの設計上の問題があります。現在、メインは、opp、num1、および num2 を設定する token() を呼び出します。次に、メインに戻り、メインが 0 を出力します。

実際にnum1とnum2で何かをする必要があります。opp の値に基づいて token() で opp1() または opp2() を呼び出すか、token() の後にメインで 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 に答える