0

我对代码的最后一部分有疑问。我想为特定单词分配数字,但我总是得到 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 !

4

4 回答 4

4

== 只有当字符串是相同的对象时才会为真。采用:

if(speech.equals("Hi"))

或不区分大小写:

if(speech.equalsIgnoreCase("hi"))
于 2013-02-18T13:10:24.377 回答
1

您不能使用==运算符来检查两个字符串在 Java 中是否具有相同的值,您需要使用.equals()orequalsIgnoreCase()方法来代替:

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()在我声明的文字字符串上使用调用,而不是从参数分配的变量。这样,如果 a speech == null,方法调用仍然有效("Hi"始终为 a String),因此您不会得到 a NullPointerException,并且流程将继续直到else分支。

于 2013-02-18T13:48:12.603 回答
0

尝试以下代码段:

主.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;
    }
}
于 2013-02-18T14:01:38.200 回答
-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");
    }
于 2013-02-18T13:25:06.383 回答