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
相关产品推荐
相关产品推荐

