我昨晚开始学习Java,而我正试图制作我的第一个代码而不是由我决定!
这是一个简单的测验问题,询问用户“你认为我的狗很可爱吗?”如果他们回答“是的”,那狗狗就会发出微笑。如果他们说“不”,他会对他们咆哮并皱眉。 如果给出了不同的答案,则会打印“什么?请再试一次”。
到目前为止,我没有遇到任何问题,但是现在我正努力做到这一点,当一个无法识别的答案被输入时,问题再次被问到,并且这个问题一直重复,直到他们回答“是”或“否” “。这是我尝试过的:
import java.util.Scanner;
public class CopyOfMain {
public static void main(String joel[]){
System.out.println("Do you think my dog Olly is cute? Yes or No");
Scanner ans = new Scanner(System.in);
String Ans = ans.nextLine();
while (!Ans.equals("Yes") || !Ans.equals("No")); {
if (Ans.equals("Yes")){
System.out.print("Woof :-)");
}else if(Ans.equals("No")){
System.out.print("Grrrr :-(");
}else{
System.out.print("What? Please try again.");
}
}
ans.close();
}
}
我添加到工作代码的所有内容都是while循环,但现在如果输入“Yes”或“No”,则没有印刷的纬线或咆哮声。但是,如果输入“是”或“否”以外的其他内容,则输入正确的单词并打印,但问题仍然没有被重新询问。 有人可以建议修复吗?
答案 0 :(得分:1)
您必须先检查结果,然后检查循环条件:
String Ans;
do {
Ans = ans.nextLine()
if (Ans.equals("Yes")) {
System.out.print("Woof :-)");
} else if(Ans.equals("No")) {
System.out.print("Grrrr :-(");
} else {
System.out.print("What? Please try again.");
}
} while (!(Ans.equals("Yes") || Ans.equals("No")));
答案 1 :(得分:1)
重新读取循环中的行(也使用AND而不是OR没有任何东西都是“是”和“否”或更简单的无限循环和中断),也 - 我会使用另一个变量Ans
和ans
对我的口味来说太相似了。另外,请注意我正在测试你的字符串独立于case(我假设“是”和“YES”也应该有效)。最后,在while
之后和开放括号之前没有分号(这是一个空循环) -
String response = ans.nextLine();
while (true) {
if (response.equalsIgnoreCase("Yes")){
System.out.println("Woof :-)");
break;
}else if(response.equalsIgnoreCase("No")){
System.out.println("Grrrr :-(");
break;
}else{
System.out.println("What? Please try again.");
response = ans.nextLine();
}
}
答案 2 :(得分:0)
您的while循环将始终评估为true。如果您输入"是",则它不是"否",反之亦然。
什么时候你想要while循环是真的?在尝试计算布尔逻辑之前,大声说出来并将其写在一张纸上。
你还需要在while循环中再次阅读答案,否则它永远不会改变。
答案 3 :(得分:0)
解决!通过两个好答案的组合。我使用了这个答案中的代码,并从另一个答案中加入了do ..然后我在现有的“else”语句下创建了一个新的If和else if语句!谢谢大家的亲切和快速的帮助。
P.s比两个单独的if / else语句更容易吗?
我会把我的最终代码放在这里给任何对我有类似问题的人。
import java.util.Scanner;
public class CopyOfMain {
public static void main(String joel[]){
System.out.println("Do you think my dog Olly is cute? Yes or No");
Scanner ans = new Scanner(System.in);
String response = ans.nextLine();
{
do {
if (response.equalsIgnoreCase("Yes")){
System.out.print("Woof :-)");
}else if(response.equalsIgnoreCase("No")){
System.out.print("Grrrr :-(");
}else{
System.out.print("What? Please try again.");
response = ans.nextLine();
if (response.equalsIgnoreCase("Yes")){
System.out.print("Woof :-)");
}else if(response.equalsIgnoreCase("No")){
System.out.print("Grrrr :-(");
}
}
} while (!response.equalsIgnoreCase("Yes") && !response.equalsIgnoreCase("No"));
}
ans.close();
}
}
编辑:Elliot Frisch用更短的代码很好地解决了这个问题。看看他编辑的答案!
答案 4 :(得分:0)
最简洁的解决方法可能是多维数组。把它想象成一个数组内的数组。
String arr[] = [["question","answer"], ["question","answer"]];
...等
使用此方法您只需要一个小循环:
for (x=0;questions < arr.length; x++) {
System.out.print(arr[x][x]);
if (arr[x][x+1] == true)
score++;
else...
}