Android计算器崩溃



我正在制作一个简单的android计算器,必须支持+,-,*,/.

当我尝试按下任何按钮-应用程序崩溃。经过一番调查,我发现问题出在内部if语句:

public void buttonFunctionNumber(View view) {
        if (view instanceof Button){
            Button button = (Button) view;
            String str = button.getText().toString();
            
            if (Double.parseDouble(result.getText().toString()) == 0)
                result.setText(str);
            else
                result.append(str);
        }
    }

if:在用户按下想要的数字之后,在他通过第二个数字之前,计算器的屏幕将显示一个0。因此,在这个if中,我想检查结果是否为0 (result是计算器屏幕显示的),以知道用户想继续到下一个数字。

else:用户想继续为计算的数字添加更多的数字,所以我们附加下一个数字。

我想知道如何解决这个问题。

谢谢你的时间:)

整个代码:

package com.example.myfirstproj;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    TextView result;
    double num1=0.0, num2=0.0;
    String sign = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        result = findViewById(R.id.textViewResult);
    }

    public void buttonFunctionNumber(View view) {
        if (view instanceof Button){
            Button button = (Button) view;
            String str = button.getText().toString();
            if (Double.parseDouble(result.getText().toString()) == 0.0)
                result.setText(str);
            else
                result.append(str);
        }
    }
    public void buttonEqualFunction(View view) {
        if (view instanceof Button) {
            String temp2 = result.getText().toString();
            num2 = Double.parseDouble(temp2);
            double res = 0.0;
            switch (sign) {
                case "+":
                    res = num1 + num2;
                    break;
                case "-":
                    res = num1 - num2;
                    break;
                case "*":
                    res = num1 * num2;
                    break;
                case "/":
                    if (num2 != 0.0)
                        res = num1 / num2;
                    else
                        Toast.makeText(this, "Error Cant divide by 0", Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
            }
            num1 = res;
            result.setText(res + "");
        }
    }
    public void buttonAddFunction(View view) {
        if (view instanceof Button){
            String temp1 = result.getText().toString();
            num1 = Double.parseDouble(temp1);
            sign = "+";
            result.setText(" ");
        }
    }
    public void buttonSubtractFunction(View view) {
        if (view instanceof Button) {
            String temp1 = result.getText().toString();
            num1 = Double.parseDouble(temp1);
            sign = "-";
            result.setText("0");
        }
    }
    public void buttonMultiplyFunction(View view) {
        if (view instanceof Button) {
            String temp1 = result.getText().toString();
            num1 = Double.parseDouble(temp1);
            sign = "*";
            result.setText("0");
        }
    }
    public void buttonDivideFunction(View view) {
        if (view instanceof Button) {
            String temp1 = result.getText().toString();
            num1 = Double.parseDouble(temp1);
            sign = "/";
            result.setText("0");
        }
    }
    public void buttonClearFunction(View view) {
        result.setText("0");
    }
}

在解析

之前,尝试调整结果并检查null和empty。
String result = result.getText().toString()).trim();
if (result != null && result.length() > 0) {
   if (Double.parseDouble(result) == 0.0)
      result.setText(str);
   else
      result.append(str);
}

最新更新