Java"&" vs" |"声明问题

时间:2014-07-04 01:04:05

标签: java

在过去的一两天里,我是Java的新手,而且我一直在搞制作一些非常基本的程序。我有以下代码作为一个简单的数字猜测程序

public class GUESS2 {
public static void main(String args[])
        throws java.io.IOException {

        //This program will have you solve a numeric puzzle using different hints as you get closer

        int answer='5', guess=0, i=0;

        char ignore;

        do{

            i++;
            System.out.print("Can you guess the number I'm thinking of???");
            guess = (int) System.in.read();

            if(guess==answer) System.out.println("CORRECT!!!"); 

            if(guess >answer) System.out.println("Too high!");

            if(guess <answer) System.out.println("Too low!");

            do{
                ignore=(char) System.in.read();
            }while (ignore != '\n');

            } while(answer!=guess && i != 5);


        } 

    }

我的问题在于&#34;而#34; statment。我希望它在EITHER answer = guess或i = 5时退出此循环。当我使用|或||它给了我相反的,只有退出当我做回答=猜测和i = 5同时似乎倒退到我。这个当前的代码使用&#34;&amp;&amp;&#34;当EITHER回答=猜测或i = 5时,这对我来说没有意义。

我再次成为初学者,我感谢你们花时间帮助我 - 可能是一些简单的事情,但我已经搞砸了一段时间。

4 个答案:

答案 0 :(得分:1)

如果你想在A或B为真时退出循环,那么只要不是这种情况你就想留下来:当A和B都是假的时候。这就是你的代码的读取方式。

答案 1 :(得分:1)

让我们考虑一下可能性。首先,使用OR(||)运算符:

(answer != guess || i != 5)

如果答案等于猜测,则回答!= guess评估为false,根据您所描述的,应该使程序退出。但是,i!= 5仍然是真的,因此整个语句将评估为true,使程序继续运行,而语句为真。

如果答案等于猜测,并且i == 5,则两者都将评估为假,并且由于它们都不为真,因此OR将评估为false,从而使循环退出。

现在,使用AND(&amp;&amp;)运算符:

(answer != guess && i != 5)

如果答案等于猜测,则回答!= guess评估为假,并且,因为它是一个AND运算符,它要求两者都为真,语句将评估为false,使循环退出。如果i等于5,则i!= 5计算为false,并且如前所述,将使语句求值为false,并且循环退出。

希望有所帮助。

编辑:我发现link,可以帮到你,看到第8项。

答案 2 :(得分:0)

&amp;&amp;为您提供所需的行为,因为它需要将这两个条件评估为true才能继续。这意味着如果answer等于guess(第一个条件失败),或者i等于5(第二个条件失败),循环将退出。但是,用||操作员,只要其中任何一个都是真的,你就说继续。它们分别被称为逻辑和逻辑或。这应该有所帮助:

a&amp;&amp; b - &gt;如果两者都为真,则计算结果为true,否则为false

a || b - &gt;如果两者都为真,则计算结果为true,否则为false

答案 3 :(得分:0)

它没有意义,因为你没有以正确的方式阅读这些东西:

您要求的是:继续循环 直到 回答==猜测 i = = 5

但是,这段代码实际上意味着:

do{
} while(answer!=guess && i != 5);

&#34;如果两个 回答都不是 ,请继续循环 i!= 5&# 34;

基本上意味着同样的事情。你发现它违反直觉的原因是因为你正在考虑停止条件&#34; do-while循环指定&#34;继续条件&#34;

有些语言(不是Java)确实提供了do-until循环,它正在做你想要的。如果它是用Java提供的话,它可能看起来像这样:

do {
} until (answer == guess || i == 5)