Java:糟糕的操作数类型

use*_*084 3 java

我是初学者,如果这个问题很愚蠢我很抱歉.

我写了以下代码:

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");
    }
Run Code Online (Sandbox Code Playgroud)

我要做的是检查t_city是否与其中一个允许的城市(Judenburg,Knittelfeld,Zeltweg,Leoben)相同.

但是当我尝试编译代码时,我收到此错误消息:"错误:二进制运算符的错误操作数类型'|'"

那么任何人都可以帮助我吗?我想我用的是"||" 错了,但我无法让它发挥作用.

E:谢谢大家,我甚至不知道equals()存在.

das*_*ght 13

您的代码中存在两个问题:您需要使用equals比较Java字符串,并且需要重复使用比较来构造||表达式:

if(t_city.equals("Judenburg") || t_city.equals("Knittelfeld") ... )
Run Code Online (Sandbox Code Playgroud)

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

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

以下是关于ideone的后续方法演示.

  • +1,但即使没有Guava类,你也不需要`new String [] {...`.只是`Arrays.asList("Judenburg","Knittelfeld",......)); (2认同)

kos*_*osa 9

 if(t_city == "Judenburg" || "Knittelfeld" || "Zeltweg" || "Leoben" ||...
Run Code Online (Sandbox Code Playgroud)

两个问题:

1)equals()用于String比较

"Judenburg".equals(t_city)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 和"常数".equals()避免潜在的NPE (5认同)