3

我是初学者,如果问题很愚蠢,我很抱歉。

我写了以下代码:

public class Traindata {
String City;

public Traindata(String t_city) { 


    if(t_city == "Judenburg" || "Knittelfeld" || "Zeltweg" || "Leoben" || "Bruck/Mur" || "Kapfenberg") {
        City = t_city;
    } else {
        System.out.println("City not allowed: " + t_city + "\n");
    }

我要做的是检查 t_city 是否与允许的城市之一(Judenburg、Knittelfeld、Zeltweg、Leoben)相同。

但是当我尝试编译代码时,我收到了这个错误消息:“错误:二元运算符'|'的操作数类型错误”

那么有人可以帮我解决这个问题吗?我想我用了“||” 错了,但我就是无法让它工作。

E:谢谢大家,我什至不知道equals()的存在。

4

3 回答 3

13

你的代码有两个问题:需要使用equals比较Java字符串,需要反复使用比较来构造||表达式:

if(t_city.equals("Judenburg") || t_city.equals("Knittelfeld") ... )

更好的是,构建一个HashSet<String>您希望匹配的城市,并使用contains方法检查条件:

Set<String> cities = new HashSet<String>(Arrays.asList(
    "Judenburg", "Knittelfeld", "Zeltweg", "Leoben", "Bruck/Mur", "Kapfenberg"
));
...
if (cities.contains(t_city)) {
    ...
}

这是ideone 上后一种方法的演示。

于 2013-08-07T19:47:12.820 回答
9
 if(t_city == "Judenburg" || "Knittelfeld" || "Zeltweg" || "Leoben" ||...

两个问题:

1)equals()用于String比较

"Judenburg".equals(t_city)

2)您的代码应如下所示:

if("Judenburg".equals(t_city) || "Knittelfeld".equals(t_city) ......

于 2013-08-07T19:47:11.703 回答
3

( ||or) 运算符连接两个布尔表达式并返回一个布尔值。当你写:

t_city == "Judenburg" || "Knittelfeld"

的左侧||是正确计算为布尔值的表达式t_city == "Judenburg",但右侧"Knittelfeld"不是布尔值,而是字符串!

你应该这样写:

(t_city == "Judenburg") || (t_city == "Knittelfeld") || (t_city == "Zeltweg") || (t_city == "Leoben") || (t_city == "Bruck/Mur") || (t_city == "Kapfenberg")

这样,括号之间的每个表达式都是一个布尔表达式。

编辑:您还应该更改比较字符串的方式。t_city == "Judenburg"比较指针,这不是您想要的。使用:t_city.equals("Judenburg")代替。

于 2013-08-07T19:49:27.113 回答