【问题标题】:Equal function is not working in my java codeEqual 函数在我的 java 代码中不起作用
【发布时间】:2023-03-15 11:20:01
【问题描述】:

我的 xml 中有 2 个文本视图、1 个编辑框和 1 个按钮。

在我的代码中,这一行不起作用:

if(c.equals(str)){
                Toast.makeText(GameActivity.this, "Alright",Toast.LENGTH_LONG).show();
            }

但下一行(else 语句)正在工作,并且在两种情况下(if & else 语句)它都显示 else 函数 toast(“错误”)。

这是我的代码:

public class GameActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) { 
            TextView tv = (TextView) findViewById(R.id.textView1);
            TextView tv2 = (TextView) findViewById(R.id.textView2);
            Random r = new Random();
            int i = r.nextInt(10 - 2) + 2;
            tv.setText(i +"");
            Random r1 = new Random();
            int j = r1.nextInt((9 - 2) + 1) + 2;
            tv2.setText(j +"");
            
            int a = Integer.parseInt(tv.getText().toString());
            int b = Integer.parseInt(tv2.getText().toString());
            int result =  a*b;
            String str = String.valueOf(result);
            
            EditText txt4 = (EditText) findViewById(R.id.editText1);
            String c = txt4.getText().toString();
            
            if(TextUtils.isEmpty(txt4.getText().toString())) {
                txt4.setError("Please enter your answer");
                return;
            }
            
            if(c.equals(str)){
                Toast.makeText(GameActivity.this, "Alright",Toast.LENGTH_LONG).show();
                
            }
            
            else{
                Toast.makeText(GameActivity.this, "wrong",Toast.LENGTH_LONG).show();
            }
            
            txt4.setText("");
        }

    });
    }

【问题讨论】:

  • 所以c.equals(str) 在您期望为真时返回假?您是否调试并检查了 cstr 的值实际上应该相等吗?如果实际满足条件,您是否检查了 Toast.makeText(...) 做正确的事情并且其中没有一些硬编码值?
  • if 之前运行Log.e('testing equal',c+":"+str) 并在此处发布日志结果。它应该显示类似String1:StringYouThinkIsString1
  • str 似乎实际上包含一个数字,您是否尝试将用户输入解析为数字(检查是否首先输入了数字,例如使用简单的正则表达式)并比较数字而不是字符串?
  • 另一件事:r1.nextInt((9 - 2) + 1) 看起来很奇怪,为什么不简单地r1.nextInt(10 - 3) 或只是r1.nextInt(7)
  • 在比较之前打印c, str并检查它们是否相同.....

标签: java android eclipse equals equals-operator


【解决方案1】:

代替

String str = String.valueOf(result);

你应该使用

String str = Integer.toString(result);

【讨论】:

  • 这没什么区别,String.valueOf(int) 被实现为return Integer.toString(i);
【解决方案2】:

试试这个, 我得到了结果

public class Test extends AppCompatActivity {
Button b1;
TextView t1,t2;
EditText e1;
int a,b;
@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
     b1 = (Button) findViewById(R.id.button2);
     t1=(TextView) findViewById(R.id.textView4);
     t2=(TextView) findViewById(R.id.textView5);
     e1=(EditText) findViewById(R.id.editText);
    Random r = new Random();
    int i = r.nextInt(10 - 2) + 2;
    t1.setText(i +"");
    Random r1 = new Random();
    int j = r1.nextInt((9 - 2) + 1) + 2;
    t2.setText(j +"");

     a = Integer.parseInt(t1.getText().toString());
     b = Integer.parseInt(t2.getText().toString());

  b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int result =  a*b;
            String str = String.valueOf(result);

            String c = e1.getText().toString();

            if(TextUtils.isEmpty(c)) {
                e1.setError("Please enter your answer");
                return;
            }

            if(c.equals(str)){
                Toast.makeText(Test.this, "Alright",Toast.LENGTH_LONG).show();

            }

            else{
                Toast.makeText(Test.this, "wrong",Toast.LENGTH_LONG).show();
            }

            e1.setText("");
        }

    });
}}

【讨论】:

  • 首先,我不仅要在 OP 中转储代码,还要解释您更改的内容和原因。毕竟他来这里是为了学习一两件事。其次还有一个缺陷:输入正确答案后,您可能需要更新ab(顺便说一句,无需每次点击都进行计算)。
  • 如果该评论指的是您的答案,您应该在此处添加它,否则可能很难建立联系,特别是如果后来看到该线程并且没有阅读所有 cmets。跨度>
  • @DixitPanchal 谢谢 Dixit。您的代码运行良好。但我想使用随机数。你有什么建议?
  • @MonaK 当你进入这个活动时它会显示随机数
  • @DixitPanchal 这是真的。但我想当我按下按钮时数字随机变化。你能帮我吗?
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多