2014-11-02 237 views
0

我正在努力解决一个问题,我正在创建一个虚拟人机界面,可以与计算机通话,它会响应您的意见。所以我去了一个字符串,并把它切成文字(split()函数),都很简单。知道我是否希望PC在字符串中包含某些单词时作出响应,但事实并非如此。当我放入包含“hi”,“how”“you”的字符串时,它会不断终止程序。我粘贴了下面的代码片段。如何在if语句中读取多个.equals语句

String responseP1 = userInput.next(); 
String[] response1 = responseP1.split(" "); 
for (int I = 0; I<response1.lenght; I++){ 
    if (response[I].equalsIgnoreCase("hi") 
     && response[I].equalsIgnoreCase("how") 
     && response[I].equalsIgnoreCase("you")){ 
     System.out.println("It works") 
} 
} 

有什么建议吗?

+1

请改变'I'到'i'在循环,这是奇怪:/ – Maroun 2014-11-02 09:16:31

+2

'response [I] .equalsIgnoreCase(“hi”)&& response [I] .equalsIgnoreCase(“how”)&& response [I] .equalsIgnoreCase(“you”)''可以更简洁地写成'false' 。 – 2014-11-02 09:18:35

+0

a == b&& a==c;当b!= c时,整个表达式的计算结果为false,并且if的主体从不计算。要了解更多,请研究[二元布尔代数](http://en.wikipedia.org/wiki/Two-element_Boolean_algebra) – YoYo 2014-11-02 09:30:39

回答

-1

您可以跟踪要显示的单词数量。

int words = 0; 
for (int I = 0; I<response1.length; I++) { 
    if (response[I].equalsIgnoreCase("hi") || response[I].equalsIgnoreCase("how") || response[I].equalsIgnoreCase("you")) 
     words++; 
} 

if (words == 3) 
    System.out.println("It works"); 

但更好的建议是:

for (int i = 0; i < keywords.length; ++i) 
    if (!responseP1.contains(keywords[i])) 
     System.out.println("It does not work"); 

keywords是一个列表或者由 “喜”, “如何” 和 “你” 的阵列。

+0

Thankyou这真的有帮助。所有剩下的东西都是向前的。 – 2014-11-02 09:30:47

+0

@AndreSchoultz标记为其他人的答案,如果它是有帮助的。 – 2014-11-02 09:51:33

0

如果我看到的是正确的,则将两次相同的字符串进行比较,每次使用不同的字符串。换句话说,响应[I]不能等于“你好”和“如何”。将& &更改为|| ;)

0

您在使用和操作的if语句(& &)时,你应该使用或(||)

科瑞