You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio二次方程求解APP点击按钮崩溃,无法完成方程求解

二次方程求解APP崩溃问题排查与修复

问题根源分析

你的代码存在多个会导致崩溃或逻辑错误的点:

  • 点击方法签名错误:按钮的点击回调方法必须接收View参数,否则Android系统无法找到该方法,触发NoSuchMethodException导致崩溃。
  • 未处理空输入:当输入框为空时,Double.parseDouble会抛出NumberFormatException。
  • 未处理a=0的情况:当a=0时,方程退化为一次方程,此时计算2*a会出现除以0的ArithmeticException。
  • 逻辑不完整:未覆盖判别式小于0、无穷多解、无解等场景,导致输出不符合要求。

修复后的完整代码

package ru.samsung.itschool.book;

import static java.lang.Math.sqrt;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // 修正点击方法签名,添加View参数
    public void OnClick(View view) {
        solveEquation();
    }

    @SuppressLint("SetTextI18n")
    public void solveEquation() {
        EditText etA = findViewById(R.id.a);
        EditText etB = findViewById(R.id.b);
        EditText etC = findViewById(R.id.c);
        TextView result = findViewById(R.id.res);

        // 处理空输入
        String aStr = etA.getText().toString().trim();
        String bStr = etB.getText().toString().trim();
        String cStr = etC.getText().toString().trim();
        if (aStr.isEmpty() || bStr.isEmpty() || cStr.isEmpty()) {
            result.setText("请输入完整系数");
            return;
        }

        double a, b, c;
        try {
            a = Double.parseDouble(aStr);
            b = Double.parseDouble(bStr);
            c = Double.parseDouble(cStr);
        } catch (NumberFormatException e) {
            result.setText("请输入有效数字");
            return;
        }

        // 分情况处理方程
        if (a == 0) {
            // 一次方程或恒等式/矛盾式
            if (b == 0) {
                if (c == 0) {
                    result.setText("any");
                } else {
                    result.setText("none");
                }
            } else {
                // 一次方程:bx + c = 0
                double root = -c / b;
                result.setText(String.valueOf(root));
            }
            return;
        }

        // 二次方程
        double d = b * b - 4 * a * c;
        if (d < 0) {
            result.setText("none");
        } else if (d == 0) {
            // 重根
            double root = -b / (2 * a);
            result.setText(String.valueOf(root));
        } else {
            // 两个不同实根
            double root1 = (-b + sqrt(d)) / (2 * a);
            double root2 = (-b - sqrt(d)) / (2 * a);
            // 按示例格式用空格分隔
            result.setText(String.valueOf(root1) + " " + String.valueOf(root2));
        }
    }
}

关键修复点说明

  • 修正点击方法签名,添加View参数,确保系统能正确绑定按钮点击事件。
  • 增加空输入和无效数字的校验,避免解析异常。
  • 分场景处理方程:
    • a=0时处理一次方程、恒等式(any)、矛盾式(none)。
    • 二次方程中处理判别式小于0(none)、等于0(单根)、大于0(双根)的情况。
  • 严格按照输出要求格式化结果,符合测试用例的预期。

内容的提问来源于stack exchange,提问作者mivlix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:55:19