簡體   English   中英

我正在學習使用 android studio 制作應用程序,所以我正在制作一個簡單的計算器,但是我遇到了一個問題,無法獲得正確的答案

[英]I am learning to use android studio to make an app, so I am making a simple calculator, but I have run into a problem getting the correct answer

我已經嘗試了幾件事來讓它工作,但它返回的答案是非常錯誤的。 例如,它返回 1+2 = 99.0 和 1*2 = 2450.0 等。所有按鈕都可以工作,我認為 main 方法很好。 下面是我在單擊 equals 按鈕時將 TextView 中的 CharSequence 轉換為 String 的方式。

Button btnEquals = (Button)findViewById(R.id.btnEquals);
    btnEquals.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String problem = textDisplay.getText().toString();
            double intermediate = evalProblem(problem);
            String answer = "" + intermediate;

            textDisplay.setText(answer);

        }
    });

這就是我為了計算方程而調用的方法。

public static Double evalProblem(String s) {
    double output;
    double mult = 0.0;
    double add = 0.0;
    double sub = 0.0;
    double div = 0.0;

    if (s.contains("*")) {
        int x = s.indexOf("*");
        mult = s.charAt(x-1)*s.charAt(x+1);
    }
    if (s.contains("/")) {
        int x = s.indexOf("/");
        div = s.charAt(x - 1) / s.charAt(x + 1);
    }
    if (s.contains("+")) {
        int x = s.indexOf(("+"));
        add = s.charAt(x-1) + s.charAt(x+1);
    }
    if (s.contains("-")) {
        int x = s.indexOf("-");
        sub = s.charAt(x - 1) - s.charAt(x + 1);
    }


    output = mult + add + sub + div;
    return output;
}

.charAt()返回一個字符,而不是一個整數。 例如,“8*8”有 3 個字符 - '8'、'*' 和 '8'。 當您對字符執行數學運算時,它使用字符的 ASCII 值,例如: 'A'的 ASCII 值為 65。 '0'的值為 48。

因此,'1' + '2' = 49 + 50 = 99

您需要將'*'之前的字符串部分轉換為數字,對嗎? Java 有一個簡單的解決方案: Double.parseDouble()方法:

String text = "567";
int number = Double.parseDouble(text);

要解決您的特定問題,您應該嘗試以下操作:

int x = s.indexOf('*');
mult = Double.parseDouble(s.substring(0, x)) * Double.parseDouble(s.substring(x+1));

此解決方案的最佳部分是您可以使用多於一位的數字,因為代碼將s '*' 前后的所有內容都轉換為數字。

編輯:正如 u/markspace 在下面的評論中提到的,您應該考慮使用 Java 中的內置解析庫,如下所示: Algebra equation parser for java

編輯 2:我建議使用Integer.parseInt()將字符串轉換為數字,但正如 u/MartinZeitler 在下面的評論中指出的那樣,使用Double.parseDouble()轉換為雙Double.parseDouble()值會更好。

暫無
暫無

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

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