Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本Java:基本测验的While循环?_Java_While Loop - Fatal编程技术网

基本Java:基本测验的While循环?

基本Java:基本测验的While循环?,java,while-loop,Java,While Loop,我昨晚开始学习Java,我正在努力编写我的第一个代码,而不是听写给我 这是一个简单的问答题,问用户“你认为我的狗可爱吗?”如果他们回答“是”,狗会汪汪地笑。如果他们说“不”,他会对他们咆哮并皱眉。 如果给出了不同的答案,则会打印“什么?请重试” 到目前为止,我没有任何问题让它工作,但现在我正在尝试这样做,当一个未被认可的答案被输入时,这个问题会再次被问到,并且这个问题会重复,直到他们回答“是”或“否”。以下是我尝试过的: import java.util.Scanner; public clas

我昨晚开始学习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”,则不会出现打印的纬声或咆哮声。但是,如果输入了“是”或“否”以外的内容,则输入并打印正确的单词,但问题仍然没有被重新询问。
有人能提出一个解决方案吗?

您的while循环将始终计算为true。如果输入“是”,则不是“否”,反之亦然

您希望while循环什么时候为真?大声说出来,并写在纸上,然后再尝试计算布尔逻辑


您还需要在while循环中再次读取答案,否则答案将永远不会更改。

您必须能够首先检查结果,然后检查循环条件:

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")));

重新读取循环中的行(也使用an而不是an,或者nothing是“Yes”和“No”或更简单的无限循环和break),并且-我会使用另一个变量
Ans
Ans
对我的口味来说太相似了,另外,请注意,我测试的字符串不依赖于大小写(我假设“Yes”和“Yes”)也应该有效)。最后,在之后和之间以及在开括号之前没有分号(这会形成一个空循环)-


解决了!通过两个好答案的结合。我使用了这个答案中的代码,并合并了另一个答案中的do。然后我在现有的“else”语句下做了一个新的If和else If语句!谢谢大家的友好和迅速的帮助

还有比两个独立的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用更短的代码很好地解决了这个问题。看看他编辑过的答案

最简洁的方法可能是使用多维数组。将其视为数组中的一个数组

字符串arr[]=[[“问题”,“答案”],[“问题”,“答案”]…等

使用此方法,您只需要一个小循环:

for (x=0;questions < arr.length; x++) {
System.out.print(arr[x][x]);

if (arr[x][x+1] == true)
score++;

else...


}
for(x=0;问题
不,这不会像您想的那样工作。我们需要输入。
不是“是”或不是“否”
=>
不是(“是”和“否”)
=>
真的
而(!Ans.equals(“Yes”)|!Ans.equals(“No”);{
code>
在那里做什么?也让我们用数学类比:你能给出一些不能满足这个条件的数字
(x!=1)|(x!=2)
?啊!这是问题之一。有趣的是,这是我试图写的!Ans.equals(“Yes”|“No”),然后我意识到你不能这么做,所以我把它分开,忘了更改| |!!!:)这已经解决了一半问题!现在当输入随机字符时,它会再次问问题。但是,当正确的答案放进去时,它仍然什么也不返回…有什么想法吗?感谢你迄今为止的帮助,快速响应:)@user3780342编辑。我错过了d缺陷。谢谢编辑!我确实想出了一个解决方法,但它使我的代码比你的代码长得多,所以这很有帮助!我可以再次检查一下我是否理解你所做的,所以你告诉它,虽然这是真的,即代码仍在继续,(无中断)循环将继续循环?这意味着错误是,当正确答案被放入时,循环继续循环?对不起,我的理解很差,我仍在努力解决所有这些问题!错误很简单,当正确答案被放入循环时,在测试if-else逻辑之前停止。打破无限循环似乎更干净。
for (x=0;questions < arr.length; x++) {
System.out.print(arr[x][x]);

if (arr[x][x+1] == true)
score++;

else...


}