基本Java:while循环进行基本测验?

时间:2014-06-26 17:16:04

标签: java while-loop

我昨晚开始学习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”,则没有印刷的纬线或咆哮声。但是,如果输入“是”或“否”以外的其他内容,则输入正确的单词并打印,但问题仍然没有被重新询问。 有人可以建议修复吗?

5 个答案:

答案 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没有任何东西都是“是”和“否”更简单的无限循环和中断),也 - 我会使用另一个变量Ansans对我的口味来说太相似了。另外,请注意我正在测试你的字符串独立于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...


}