基本上我已经:
public static void main(String[] args)
{
String genre = "Action, Animation, Comdey";
String[] genres = genre.split(", ");
for(int i=0;i<(genres.length)-1;i++){
System.out.println(genres[i]);
if(!genres[i].equals("Action") || !genres[i].equals("Adventure")
|| !genres[i].equals("Animation") || !genres[i].equals("Biography")
|| !genres[i].equals("Comedy") || !genres[i].equals("Crime")
|| !genres[i].equals("Documentary") || !genres[i].equals("Drama")
|| !genres[i].equals("Family") || !genres[i].equals("Fantasy")
|| !genres[i].equals("Film-Noir") || !genres[i].equals("Game-Show")
|| !genres[i].equals("History") || !genres[i].equals("Horror")
|| !genres[i].equals("Music") || !genres[i].equals("Musical")
|| !genres[i].equals("Mystery") || !genres[i].equals("News")
|| !genres[i].equals("Reality-TV") || !genres[i].equals("Sci-Fi")
|| !genres[i].equals("Sport") || !genres[i].equals("Talk-Show")
|| !genres[i].equals("Thriller") || !genres[i].equals("War")
|| !genres[i].equals("Western")
){
System.out.println("Selected genres could not be identified");
return;
}else {
System.out.println("Success");
}
}
}
正如您所看到的,我有一个包含genre
的字符串Action, Animation, Comdey
,然后我用,(space)
分割每个Word然后使用if()
我正在比较每个阵列。您可能知道我的Action
单词列表中存在Animation
,Comedy
和if()
的数组。因此,不应该执行System.out.println("Selected genres could not be identified");
,但确实如此,我不知道为什么但这确实让我感到非常震惊。
您可以在https://www.compilejava.net/复制/粘贴我的代码并自行查看结果。
如果你告诉我我做错了什么,我真的很感激。
答案 0 :(得分:1)
如果您要检查当前类型是否与可用类型的||
匹配,则需要将所有OR(&&
)更改为AND(none
),例如:< / p>
public static void main(String[] args) {
String genre = "Action, Animation, Comdey";
String[] genres = genre.split(", ");
for (int i = 0; i < (genres.length) - 1; i++) {
System.out.println(genres[i]);
if (!genres[i].equals("Action") && !genres[i].equals("Adventure") && !genres[i].equals("Animation")
&& !genres[i].equals("Biography") && !genres[i].equals("Comedy") && !genres[i].equals("Crime")
&& !genres[i].equals("Documentary") && !genres[i].equals("Drama") && !genres[i].equals("Family")
&& !genres[i].equals("Fantasy") && !genres[i].equals("Film-Noir") && !genres[i].equals("Game-Show")
&& !genres[i].equals("History") && !genres[i].equals("Horror") && !genres[i].equals("Music")
&& !genres[i].equals("Musical") && !genres[i].equals("Mystery") && !genres[i].equals("News")
&& !genres[i].equals("Reality-TV") && !genres[i].equals("Sci-Fi") && !genres[i].equals("Sport")
&& !genres[i].equals("Talk-Show") && !genres[i].equals("Thriller") && !genres[i].equals("War")
&& !genres[i].equals("Western")) {
System.out.println("Selected genres could not be identified");
return;
} else {
System.out.println("Success");
}
}
}
Here在逻辑OR
运算符上多了一点。在您的方案中,!genres[i].equals("Action")
评估为false
&#39;操作&#39;但是,!genres[i].equals("Adventure")
等其他条件评估为true
,因此,它会打印&# 34;无法识别所选类型&#34;。
答案 1 :(得分:0)
String genre =&#34; Action,Animation,Comdey&#34;应改为String genre =&#34; Action,Animation,Comedy&#34;
答案 2 :(得分:0)
编写上述代码的更清晰有效的方法是使用TreeSet:
public static void main(String[] args)
{
String genre = "Action, Animation, Comdey";
String[] genres = genre.split(", ");
Set<String> genreSet = new TreeSet<String>();
genreSet.add("Action");
genreSet.add("Adventure");
genreSet.add("Animation");
genreSet.add("Documentary");
genreSet.add("Comedy");
//more genres follows here
for (int i = 0; i < (genres.length) - 1; i++) {
System.out.println(genres[i]);
if (!genreSet.contains(genres[i])) {
System.out.println("Selected genres could not be identified");
return;
} else {
System.out.println("Success");
}
}
}
高效,因为在TreeSet中搜索流派字符串的时间复杂度将是(log n)的顺序。