1

我在理解 之间的区别时遇到了一些麻烦!|| 和 && 当它们在一段时间条件下进行测试时。在下面的示例中,我希望程序问一个问题“你在屏幕上看到一个四吗?” 然后,如果该人回答“否”,程序将继续并继续询问。如果用户输入答案“是”,程序会退出,但我的不会。

在我的 while 循环条件中,我是否只在 i 都小于 5 并且问题的答案不是肯定的情况下才告诉 while 循环继续?正确的思维方式是怎样的!|| 和 && 在 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

4 回答 4

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只是为了更安全的一面使用,因为您正在阅读用户的输入。你永远不知道它通过什么字母组合。

于 2013-07-03T22:04:44.077 回答
3

在您的 while 条件下,您正在测试答案而不是问题,请尝试:

while(i <= 20 && !(answer.equals("yes"))){
 answer = readLine("do you see a 4 on the screen?: ");
 i++;
 }
于 2013-07-03T22:00:49.530 回答
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++;
}

是你在questionwhile 函数中重新定义变量。例如,这将打印“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++;
}
于 2013-07-03T22:14:26.430 回答
0

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

&& 和 || 运算符对两个布尔表达式执行条件与和条件或运算。

试试这个:

String answer = "";
int i = 1; 

   while(i <= 20 && !(answer.equalsIgnoreCase("yes"))){
     answer = readLine("do you see a 4 on the screen?: ");
     i++;
     }
于 2013-07-03T22:07:16.697 回答