Моя деятельность не распознает текстовое равенство
Может кто-нибудь помочь мне, я убиваю себя здесь. Так что в моей деятельности у меня есть этот код, и приложение постоянно показывает, что CurrentQ не равен (currentQ.getODG() != answer.getText())
на ответ я вижу через LogCat с Log.d, что слова идентичны. Я просто не могу понять, что я делаю не так.
08-25 05: 28: 45.125: D / yourans (25316): на жизнь у мраку на жизнь у мраку
RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup1);
answer = (RadioButton) findViewById(grp.getCheckedRadioButtonId());
Log.d("yourans", currentQ.getODG() + " " + answer.getText());
if (currentQ.getODG().equals(answer.getText())) {
answer.setBackgroundResource(R.drawable.radiotocan);
Toast poruka1 = Toast.makeText(getApplicationContext(), "Točno!",
Toast.LENGTH_LONG);
View vieew1 = poruka1.getView();
// vieew.setBackgroundColor(Color.parseColor("#BD8BDC"));
vieew1.setBackgroundResource(R.drawable.toast1);
poruka1.setView(vieew1);
poruka1.setGravity(Gravity.CENTER_HORIZONTAL, 1, 1);
poruka1.show();
score1++;
Log.d("score1", "Your score" + score1);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
answer.setBackgroundResource(R.drawable.radiomain);
}
}, 300);
}
else if (currentQ.getODG() != answer.getText()) {
answer.setBackgroundResource(R.drawable.radionetocan);
Toast poruka2 = Toast.makeText(getApplicationContext(),
"Netočno, točan odgovor je:" + currentQ.getODG(),
Toast.LENGTH_LONG);
View vieew2 = poruka2.getView();
// vieew.setBackgroundColor(Color.parseColor("#BD8BDC"));
vieew2.setBackgroundResource(R.drawable.toast);
poruka2.setView(vieew2);
poruka2.setGravity(Gravity.CENTER_HORIZONTAL, 1, 1);
poruka2.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
answer.setBackgroundResource(R.drawable.radiomain);
}
}, 300);
}
3 ответа
Пытаться
if(currentQ.getODG().equalsIgnoreCase(answer.getText()))
вместо
if(currentQ.getODG()!=answer.getText())
Надеюсь, поможет!
Java использует знак двойного равенства, чтобы проверить, являются ли объекты, на которые указывают две переменные, одним и тем же объектом, а не эквивалентны ли они. Поскольку оба String
Каждый из них возвращается двумя отдельными вызовами метода, они никогда не будут одним и тем же объектом.
Вместо этого вы захотите использовать один из методов проверки равенства из String
учебный класс:
.equals(String b)
Проверяет, являются ли две строки одинаковыми..equalsIgnoreCase(String b)
Проверяет, являются ли две строки одинаковыми, игнорируя их в верхнем или нижнем регистре.
Есть больше опций, которые вы можете найти в документации класса String, просто проверьте список открытых методов.
В вашем случае измените эту строку:
else if (currentQ.getODG() != answer.getText()) {
Читать как:
else if (!currentQ.getODG().equals(answer.getText())) {
Но для большей гибкости в распознавании ответов используйте .equalsIgnoreCase()
как это:
else if (!currentQ.getODG().equalsIgnoreCase(answer.getText())) {
Попробуй это:
менять:
currentQ.getODG().equals(answer.getText())
чтобы:
currentQ.getODG().trim().equalsIgnoreCase(answer.getText().trim())
менять:
else if (currentQ.getODG() != answer.getText())
чтобы:
else
Я думаю, что, вероятно, есть пустое место в вашей строке, поэтому используйте trim()
вырезать их, затем сравнить строки, игнорируя заглавную букву.
К вашему сведению: ссылка.