Android复选框触发CF计算逻辑异常:多选中生效单选中无返回
问题排查结果
- 第一:if判断条件存在语法错误+逻辑不匹配
你代码里的条件if (chkGejala2.isChecked() && || chkGejala4.isChecked() && chkGejala5.isChecked())存在无效的&& ||拼接,属于语法错误。即便你是笔误把||写错成了&&,当前逻辑也要求三个复选框全部勾选才会进入后续计算块,自然只勾选1个的时候不会触发计算,没有输出。 - 第二:未处理非全选场景的取值异常
就算你修改了条件让单选时能进入计算块,当前代码也会强制读取三个输入框的数值,如果只勾选1个,另外两个未勾选对应的输入框大概率是空值,执行Double.parseDouble读取空值会直接抛出NumberFormatException,程序触发异常中断,也不会有输出结果。 - 第三:CF计算逻辑写死为三值合并,不支持单选/双选场景
当前的CF合并逻辑是固定按2、4、5三个值依次合并计算的,没有根据实际勾选的症状动态调整计算逻辑,就算勉强跑通结果也不对。
修复方案
先修正判断逻辑,对每个复选框单独判断状态,只处理勾选的对应输入,再动态计算CF值,参考代码如下:
// 先定义变量存储选中的CF值列表 List<Double> selectedCF = new ArrayList<>(); // 分别判断每个复选框是否勾选,勾选的就取值计算对应CF if (chkGejala2.isChecked()) { double doubleGejala2 = Double.parseDouble(txtNilaiGejala2.getText().toString()); selectedCF.add(nilaiGejala2 * doubleGejala2); } if (chkGejala4.isChecked()) { double doubleGejala4 = Double.parseDouble(txtNilaiGejala4.getText().toString()); selectedCF.add(nilaiGejala4 * doubleGejala4); } if (chkGejala5.isChecked()) { double doubleGejala5 = Double.parseDouble(txtNilaiGejala5.getText().toString()); selectedCF.add(nilaiGejala5 * doubleGejala5); } // 只要有选中的项就执行CF合并 if (!selectedCF.isEmpty()) { double combineCF = selectedCF.get(0); for (int i = 1; i < selectedCF.size(); i++) { combineCF = combineCF + selectedCF.get(i) * (1 - combineCF); } String hasilHitungGejalaPenyakitA = String.valueOf((combineCF * 100)); NamaPenyakit += "\nTipe 2"+"\n"+hasilHitungGejalaPenyakitA+" %"; }
内容的提问来源于stack exchange,提问作者AnsiiBoi
相关产品推荐
相关产品推荐

