Android中if else语句失效问题求助:答题应用逻辑异常
问题分析与解决方案
嘿,我一眼就发现你代码里的问题啦!这是Java字符串比较中非常常见的坑~
核心问题:错误使用==比较字符串内容
在Java里,==运算符用来判断两个对象的内存引用是否相同,而不是比较字符串的实际内容。你这里写的btn_continue.getText() == "Continue",本质是在判断getText()返回的CharSequence对象和字符串字面量"Continue"是不是同一个对象,而不是看它们的文本内容是否一致,这就导致明明内容匹配,条件却不成立,直接跳到了else分支。
修正后的代码
把字符串比较改成用equals()方法,同时为了避免空指针和类型问题,建议先把CharSequence转成String,还可以加上trim()处理用户可能输入的多余空格:
public void checkAnswer_condition_q2(View view) { EditText blank_one = (EditText)findViewById(R.id.fill_condition1); EditText blank_two = (EditText)findViewById(R.id.fill_condition2); // 修正字符串比较逻辑:用equals判断内容,同时处理空和空格 String btnText = btn_continue.getText().toString().trim(); if("Continue".equals(btnText)){ Intent intent = new Intent(condition_q2.this, loops.class); startActivity(intent); // 可选:如果需要关闭当前页面,添加finish(); } else if(/* 你的其他条件 */) { // 其他分支逻辑 } else { // 默认分支逻辑 } }
为什么这么改?
"Continue".equals(btnText):把常量放在前面可以避免空指针异常——如果btn_continue的文本为空,btnText会是空字符串,但equals()会安全返回false,不会抛出NullPointerException。trim():处理用户不小心输入的前后空格,比如用户输入了" Continue "(带空格),也能正确匹配目标文本。- 转成String:
getText()返回的是CharSequence,虽然部分情况下CharSequence的equals()也能工作,但统一转成String后比较更稳妥,避免潜在的类型匹配问题。
内容的提问来源于stack exchange,提问作者Ved Sarkar
相关产品推荐
相关产品推荐

