我对代码的最后部分有疑问。我想为特定的单词分配数字,但我总是得到0值,即使我从第一个System.out.println正确获取这些字符串,我无法在第二个System.out.println.Any获得这些字符串的数字等价物。想法如何解决这个问题?
public static double number;
protected void myMethod(HttpServletRequest request, HttpServletResponse response) {
String speech= request.getParameter("speech");
System.out.println("The recognized speech is : "+ speech);
// There is no problem till here.
if(speech == "Hi")
number = 1 ;
if(speech== "Thanks")
number = 2 ;
if(speech== "Bye")
number = 0 ;
System.out.println("The number for the speech is : " + number);
}
然而,在这里,我没有得到正确的数字,但每个单词只有0!
答案 0 :(得分:4)
如果字符串是同一个对象,则==仅为true。使用:
if(speech.equals("Hi"))
或无案件匹配:
if(speech.equalsIgnoreCase("hi"))
答案 1 :(得分:1)
您无法使用==
运算符检查两个字符串在Java中是否具有相同的值,您需要使用.equals()
或equalsIgnoreCase()
方法:
if("Hi".equalsIgnoreCase(speech)) {
number = 1;
}
else if("Thanks".equalsIgnoreCase(speech)) {
number = 2;
}
else if("Bye".equalsIgnoreCase(speech)) {
number = 0;
}
else {
number = -1;
}
原因是==
运算符比较引用;当且仅当存储在变量true
中的实例与您创建的文字字符串相同的实例时,它才会返回speech
双引号之间("Hi"
,"Thanks"
或"Bye"
)。
另请注意,我对我声明的文字字符串使用equalsIgnoreCase()
调用,而不是从参数分配的变量。这样,如果speech == null
,方法调用仍然有效("Hi"
总是是String
),那么您将无法获得{ {1}},流程将一直持续到NullPointerException
分支。
答案 2 :(得分:0)
请尝试以下代码段:
Main.java
public class Main {
public static void main(String[] args) {
List<StringWithValue> stringList = new ArrayList<StringWithValue>();
stringList.add(new StringWithValue("Hi", 1));
stringList.add(new StringWithValue("Thanks", 2));
stringList.add(new StringWithValue("Bye", 3));
String speech = "Hi";
int number = 0;
for(StringWithValue swv : stringList){
if(swv.getString().equals(speech)){
number = swv.getValue();
break;
} else {
number = -1;
}
System.out.println("The number for the speech is : " + number);
}
}
StringWithValue.java
public class StringWithValue {
private String string;
private int value;
public StringWithValue(String string, int value) {
this.string = string;
this.value = value;
}
public String getString() {
return string;
}
public int getValue() {
return value;
}
}
答案 3 :(得分:-2)
public static double number;
if(speech=="hi")
{
number=1;
}
else if(speech=="thanks")
{
number=2;
}
else if(speech=="Bye")
{
number=0;
}
else
{
System.out.println("Word Not Found");
}