Android应用if-else判断仅执行else分支问题排查
问题根因
你把读取EditText输入、给num变量赋值的逻辑写在了onCreate方法中,这个方法仅在Activity首次创建时执行1次。此时页面刚加载完成,用户还没来得及在输入框输入内容,读取到的输入值是空字符串,num始终是int类型的默认值0,永远不会等于4,所以点击提交时永远触发else分支的错误提示。
修复步骤
- 删除
onCreate里提前读取输入、给num赋值的那段代码 - 把读取输入、解析数值的逻辑移到提交按钮的点击回调里,同时增加非空、数字格式校验,避免用户输入非数字时触发崩溃
修复后核心代码
submitBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 点击提交时再实时读取输入框内容 String ans = answer.getText().toString().trim(); int num = 0; // 校验输入合法性 if (!ans.isEmpty()) { try { num = Integer.parseInt(ans); } catch (NumberFormatException e) { Toast.makeText(MainActivity.this, "请输入有效数字", Toast.LENGTH_SHORT).show(); return; } } else { Toast.makeText(MainActivity.this, "请输入答案", Toast.LENGTH_SHORT).show(); return; } if (num == 4){ Toast.makeText(MainActivity.this, "Answer is Correct!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Answer is Incorrect", Toast.LENGTH_SHORT).show(); } } });
注意:原代码里
num是成员变量,修复后如果其他地方没有用到这个变量,可以直接删掉成员变量声明,在点击回调里定义局部变量即可,避免全局变量值异常引发其他问题。
内容的提问来源于stack exchange,提问作者CodingDark
相关产品推荐
相关产品推荐

