Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Conditional Statements_Infinite Loop_Infinite - Fatal编程技术网

Java 在while条件下赋值

Java 在while条件下赋值,java,loops,conditional-statements,infinite-loop,infinite,Java,Loops,Conditional Statements,Infinite Loop,Infinite,首先,我知道=和==之间的区别。我想使用=隐式生成无限循环。 因此,我的代码如下所示: boolean flag= true; while (flag=false){ System.out.println("inside loop"); } System.out.println("rest"); boolean test = flag = true; // test == true 不幸的是,它没有进入循环并打印“rest”。为什么?我读错了吗? 在

首先,我知道=和==之间的区别。我想使用=隐式生成无限循环。 因此,我的代码如下所示:

 boolean flag= true;
    while (flag=false){
        System.out.println("inside loop");
    }
    System.out.println("rest");
boolean test = flag = true;
// test == true
不幸的是,它没有进入循环并打印“rest”。为什么?我读错了吗? 在while条件下,我给标志赋值为false。因此,它在flag=false时循环(这是)

当我这样做时(从false变为true),它进入无限循环:

boolean flag= true;
    while (flag=true){
        System.out.println("inside loop");
    }
    System.out.println("rest");

在我看来,这两个例子都应该进入循环。但只有第一个有。请帮助我理解这一点。谢谢

与==之间的唯一区别是:

  • =是赋值运算符,将值赋给int、boolean或任何常量/变量
  • ==是一个运算符,主要用于循环(for、else for、if和while)
对于您的情况,我可以说您需要在while循环中使用==:

boolean flag=true;
    while (flag==false){
        System.out.println("inside loop");
    }
    System.out.println("rest");

使用无限循环也不太好。您不会外出,这会使您的代码出错。

这是由于赋值运算符的工作方式造成的

在循环条件中,您正在声明

flag = true
它返回
true
,但在此之前将
true
分配给
标志

这是因为我们可以一次完成多个作业,如下所示:

 boolean flag= true;
    while (flag=false){
        System.out.println("inside loop");
    }
    System.out.println("rest");
boolean test = flag = true;
// test == true
本质上
(flag=true)
转换为:

  • 将真值指定给标志
  • 返回
    true
    以供进一步使用

    • while循环测试的第一步是

      flag=false
      
      然后立即测试其值,这是错误的

      如果值为false,则不会输入while循环。

      while(flag=false)
      执行两项操作:

    • 它将
      false
      分配给
      标志
    • 它的计算结果为
      ,而(false)
    • 由于其计算结果为
      ,而(false)
      ,因此不会执行其主体

      类似地,

      while(flag=true)
      做两件事:

    • 它将
      true
      分配给
      标志
    • 它的计算结果为
      ,而(true)

    • 由于它的计算结果为
      ,而(true)
      ,因此它的主体将无限执行。

      也许此链接可以帮助您尝试同时将false分配给flag并测试它是否为false吗?不,我试图找出代码在这两种情况下不进入循环的原因:(我真的不明白你在这个问题上想看什么,但是如果你想用你的第一个例子进入一个循环,为什么不在((flag=false)==false)的时候做这个
      很有意思。我会接受一个对我有帮助的答案。很抱歉,我是个新手,所以不知道这个选项。谢谢,是的,我知道。我想故意让无限。我的问题是为什么它在这两种情况下都不进入循环。你知道为什么吗?谢谢,很好的解释。本质上最重要的是flag=false返回FA这就意味着它不会进入循环。