我是android studio的初学者。我正在开发一个测验应用程序。应用程序应检查要比较的两个字符串并给出正确的答案。但比较两个字符串(即使它们是相同的)并没有给出正确的输出。相反,它直接转到代码中的最终return语句。这是代码:
// ...
EditText Answer1 = (EditText) findViewById(R.id.answer1);
String ans = Answer1.getText().toString();
Log.v("MainActivity", "City name :" + ans);
String answer= String.valueOf(Answer1);
// ...
public String YourAnswers(String ans, boolean isDT, boolean isHC, boolean isBO,String answer) {
String Message = "1.:You answered \n"+ans+ "\n" +ques1(answer);
Message = Message + " \n 2.: \n" +question2(isDT,isHC,isBO) ;
return Message;
}
public String ques1(String answer) {
if (answer == "Jefferson City"){//||ans=="Jeff City"||ans=="Jeffcity"||ans=="Jeffersoncity"){
return "correct";
}
else if(answer =="Jeff City") {
return "correct.";
}
else if(answer =="Jeffcity"){
return "correct..";
}
else if(answer.equals("Jeffersoncity")){
return "correct.....";
}
return "Sorry,but the correct ans is Jefferson City";
}
当它进入ques1()
时,它会直接转到最后一个语句,即return "Sorry,but the correct ans is Jefferson City";
。当我输入正确的答案时,它将返回上述行。
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:5)
" =="不是在java中比较String内容的正确方法。
使用string1.equals(string2)
答案 1 :(得分:1)
始终使用.equals()
代替==
。
但请尝试使用此代码,以便answer
使用toLowerCase()进行任何大写:
import java.util.Arrays;
...
...
String[] answers = {"jefferson city","jeff city", "jeffcity", "jeffersoncity"};
if(Arrays.asList(answers).contains(answer.toLowerCase())) {
return "Correct";
} else {
return "Sorry,but the correct ans is Jefferson City";
}
答案 2 :(得分:1)
为了比较Java中的两个字符串,有两种常用方法。在您的示例中,您使用==
而不是使用其中一个,而不是equality operator - 这些,您不能用来检查String
上的相等性。
您可能使用的第一个方法是equals
,位于String
。这将检查并查看String
包含的所有字符是否完全相同 - 也就是说,它还会确保您提供的String
具有与"Hello, world!".equals("Hello, world!"); // ‘equals’ returns true
"Hello, world!".equalsIgnoreCase("hello, world!"); // ‘equals’ returns false
相同的String
你要比较它。
以下是一个例子:
true
您可以使用的第二方法是letter case,也位于String
上。如果"Hello, world!".equals("Hello, world!"); // ‘equals’ returns true
"Hello, world!".equalsIgnoreCase("hello, world!"); // ‘equals’ returns true
的比较相同,则会返回public String ques1(String answer)
{
if (answer.equals("Jefferson City"))
{
return "correct";
}
else if(answer.equals("Jeff City"))
{
return "correct.";
}
else if(answer.equals("Jeffcity"))
{
return "correct..";
}
else if(answer.equals("Jeffersoncity"))
{
return "correct.....";
}
return "Sorry,but the correct ans is Jefferson City";
}
,但如果它们属于不同的情况则不予考虑 - 它不关心。
让我们重复上一个例子,看看会发生什么:
{
这次看看两者是如何回归真实的?
考虑到这一切,我们可以继续修改您的代码:
android:key
这会很棒!
我将@+id/
放在新行上并不会影响程序的结果。然而,equalsIgnoreCase
为什么你想把它们放在不同的行上。我写这篇文章的原因是因为我非常喜欢再次提起辩论 - 让人们发疯。
答案 3 :(得分:0)
如果不区分大小写,请在字符串上使用.equalsIgnoreCase。另外,为避免nullpointer异常,请使用以下语法
“Jeff City”.equals(stringVar);