使用条件测试真/假! ||和&&运营商

时间:2013-07-03 21:57:26

标签: java while-loop

我在抓住区别之间有点麻烦! ||和&&当他们在一段时间内进行测试时。在下面的示例中,我希望程序提出一个问题“你看到屏幕上有四个吗?”然后,如果该人回答不,该程序继续并继续询问。如果用户输入答案“是”则程序退出但我的程序不退出。

在我的while循环条件中,我告诉while循环只有当i小于5并且问题的答案不是肯定时才继续?怎样才是正确的思考方式! ||和&&在while循环的上下文中使用时?

import acm.program.*;

public class WhileConditionTestProgram extends ConsoleProgram{
public void run(){

String question = ("do you see a four on the screen? ");
int i = 1; 

   while(i <= 20 && !(question.equals("yes"))){
     String question = readLine("do you see a 4 on the screen?: ");
     i++;
     }

   }
  }

4 个答案:

答案 0 :(得分:4)

除了明显的变量重新声明问题之外,您还应该考虑使用do-while循环,因为您至少要读取一次用户输入。

因此,您可以更好地将循环更改为:

int i = 0;
String answer = "";

do {
    answer = readLine("do you see a 4 on the screen?: ");
    i++;
} while (i <= 20 && !answer.equalsIgnoreCase("yes"));

注意:我使用equalsIgnoreCase只是为了更安全的一面,因为您正在阅读来自用户的输入。你永远不知道它传递的是什么字母组合。

答案 1 :(得分:3)

在你的状态下你正在测试答案而不是问题尝试:

while(i <= 20 && !(answer.equals("yes"))){
 answer = readLine("do you see a 4 on the screen?: ");
 i++;
 }

答案 2 :(得分:1)

此代码存在问题:

String question = ("do you see a four on the screen? ");
int i = 1; 

while(i <= 20 && !(question.equals("yes"))){
    String question = readLine("do you see a 4 on the screen?: ");
    i++;
}

您是否正在重新定义while函数中的question变量。例如,这将打印“1”,而不是“2”:

String question = "1";
int i = 1;

while (i <= 20) {
    String question = "2";
    i++;
}

System.out.println("Question is: " + question); // This will print "1"!

当您说String question = "2"时,您宣布一个名为question的全新变量并将其设置为“2”。当你到达while循环结束时,该变量超出范围,程序将抛出其数据。原始question未受影响。以下是该代码段的更正版本:

String question = ("do you see a four on the screen?");
int i = 1; 

while(i <= 20 && !(question.equals("yes"))){
    question = readLine("do you see a 4 on the screen?: ");
    i++;
}

答案 3 :(得分:0)

这些运算符在while循环中的工作方式与在其他任何地方工作的方式相同。

&amp;&amp;和||运算符对两个布尔表达式执行条件AND和条件OR运算。

试试这个:

String answer = "";
int i = 1; 

   while(i <= 20 && !(answer.equalsIgnoreCase("yes"))){
     answer = readLine("do you see a 4 on the screen?: ");
     i++;
     }