簡體   English   中英

為什么我的Java計算器代碼不起作用?

[英]Why is my java calculator code not working?

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,但是我找不到問題所在以及解決方法。

看一下您的main方法,您永遠不會為變量sum賦值或調用會這樣做的方法。 因此,您的計算器始終將結果打印為0.0 ,這是double的默認初始化值。 oppopp2不會自動使用,您需要實際調用它們。

您的程序有幾個設計問題。 當前,main將調用token()來設置opp,num1和num2。 然后返回到main,然后main打印0。

您實際上需要對num1和num2做一些事情。 讓token()根據opp的值調用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);
}

另外,出於對上帝的熱愛,請重命名所有變量和方法名稱。 這樣,一切對您來說都會更有意義。

正如許多人指出的那樣-只需嘗試使用調試器運行程序,即可看到至少問題從何開始:)

ppl關於未分配總和(僅初始化)的說法是正確的,這就是為什么在輸入的所有內容中都得到0.0的原因。

如果使用調試器運行,您會注意到jz.hasNextDouble()始終返回false,隨后jz.hasNext()返回true,結果op就是您輸入的整個表達式,此時您將離開token方法。並打印你的sum

您永遠不會分配sum ghd opp並且opp2方法沒有被調用,這就是為什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM