Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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 爪哇语&&引用;vs"|&引用;while语句问题_Java - Fatal编程技术网

Java 爪哇语&&引用;vs"|&引用;while语句问题

Java 爪哇语&&引用;vs"|&引用;while语句问题,java,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 c

在过去的一两天里,我还不熟悉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);


        } 

    }
公共类猜测2{
公共静态void main(字符串参数[])
抛出java.io.IOException{
//这个程序会让你在走近时使用不同的提示来解决一个数字难题
int-answer='5',guess=0,i=0;
字符忽略;
做{
i++;
System.out.print(“你能猜出我想的数字吗?”);
guess=(int)System.in.read();
if(guess==answer)System.out.println(“CORRECT!!!”);
if(猜测>回答)System.out.println(“太高了!”);

如果(猜测如果您希望在A或B为真时退出循环,那么您希望在A和B均为假的情况下保持循环。这正是您的代码的读取方式。

为您提供了所需的行为,因为它需要这两个条件都计算为真才能继续。这意味着如果ls guess(第一个条件失败),或i等于5(第二个条件失败),循环将退出。但是,使用| |运算符,只要其中一个为真,您就说continue on(继续)。它们分别称为逻辑and和逻辑or。这应该有助于:

a&&b->如果两者都为真,则计算结果为真,否则为假


< p> a b> >如果是真,则计算为真,否则假

让我们考虑可能性。首先,用或(或)算子:

(answer != guess || i != 5)
(answer != guess && i != 5)
如果答案等于猜测,则答案!=猜测的计算结果为false,根据您所描述的,这将使程序退出。但是,i!=5仍然为true,因此整个语句的计算结果将为true,使程序继续运行,而语句为true

如果答案等于猜测值,且i==5,则两者都将计算为false,并且,由于它们都不是true,OR将计算为false,从而使循环退出

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

(answer != guess || i != 5)
(answer != guess && i != 5)
如果答案等于猜测,则答案!=猜测的计算结果为false,由于它是and运算符,要求两者都为true,因此语句将计算结果为false,使循环退出。如果我等于5,则我!=5的计算结果为false,如前所述,将使语句计算结果为false,并使循环退出

希望能有所帮助


编辑:A我发现,可能对你有帮助,请看第8项。

这没有意义,因为你没有以正确的方式阅读这些内容:

你所要求的是:继续循环,直到answer==guessi==5

然而,这段代码实际上意味着:

do{
} while(answer!=guess && i != 5);
“如果答案不是猜测i!=5,则继续循环

这本质上意味着同一件事。你发现它违反直觉的原因是,当do-while循环指定“继续条件”时,你想到了“停止条件”

有些语言(不是Java)确实提供了do-until循环,这是您想要做的事情。如果它是用Java提供的,则可能是这样的:

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

记住——条件是继续循环。所以你想要一个条件,当
answer==guess | | i==5
——换句话说,与该条件相反时,该条件将无效。代码是正确的,你的期望是错误的。可能会有帮助。那篇文章肯定有助于我澄清问题。谢谢!哈哈!!!现在有意义了e对我来说。当你把它更多地放在“假+假”对“假+真”和“真对假”的术语中时。我还认为我认为它更多地是一个退出声明,而不是一个继续声明。谢谢你,伙计!