Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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中的条件工程_Java_Loops_Conditional - Fatal编程技术网

“不确定道路”&&&引用;Java中的条件工程

“不确定道路”&&&引用;Java中的条件工程,java,loops,conditional,Java,Loops,Conditional,我的状况有一些基本的问题,我不知道为什么 我想在e1和e2和e3大于tol时运行这个循环,但它只考虑e3>tol条件,并忽略它前面的两个条件 代码如下: do{ .... }while((e1>tol)&&(e2>tol)&&(e3>tol)); 我相信这与&&or有关,我将它们与同一个变量tol进行比较,但我仍然不确定原因 我设法使它与三个嵌套的ifs一起工作: do{ ..... if(e1&

我的状况有一些基本的问题,我不知道为什么

我想在
e1
e2
e3
大于
tol
时运行这个循环,但它只考虑
e3>tol
条件,并忽略它前面的两个条件

代码如下:

do{

   ....

   }while((e1>tol)&&(e2>tol)&&(e3>tol));
我相信这与&&or有关,我将它们与同一个变量
tol
进行比较,但我仍然不确定原因

我设法使它与三个嵌套的ifs一起工作:

do{

    .....

          if(e1<tol)
            if(e2<tol)
                if(e3<tol)
                    b=true;

    }while(b==false);
}


如果我删除了另外两个条件,并且只使用
}while(e1>tol)它起作用,另外两个也一样,如果我单独调节它们,它起作用,我的问题是在检查它们三个是否满足条件时。

我认为这不完全相同,在包含“&&”的代码段中,您希望在每次迭代中所有三个e*都大于tol,而在第二个代码段中,您所做的并不完全相同,e1和e2可能比tol小,而不是e3,这在第一个代码段中不会发生。
HTH

尝试编写单元测试,并在条件为真并进入循环时调试该条件。您可以像这样交错代码以调试每一行:

do{

   ....

   }while((e1>tol)
           &&(e2>tol)
            &&(e3>tol));

您的
if
语句:

if (e1 < tol)
    if (e2 < tol)
        if (e3 < tol)
            b = true;
如您所见,最初的错误是您需要使用
|
(或),而不是
&&
(和)

=
应该在那里,还是您的意思是
(e1>tol | | e2>tol | | e3>tol)
,由您决定

在简单的英语中,
while(!b)
读作“whilenot b”或“b时停止”,并且由于b被定义为“如果所有E1、E2和E3都小于TOL,则为true”,因此组合起来意味着“当所有E1、E2和E3都小于TOL时停止”


使用更新的
while
条件,即“在E1、E2或E3中至少有一个大于(或等于)TOL时继续”。请显示足够的代码以重现问题。如前所述,我认为初始循环没有问题。此外,请提供一些理由来解释为什么您认为
只考虑了e3>tol条件
。另外需要注意的是,
的反面是
,非常感谢Andreas,我认为如果我使用
|
,那么它只需要满足三个条件中的一个,但结果却是oposite。关于
(!b)
的注释。
if (e1 < tol)
    if (e2 < tol)
        if (e3 < tol)
            b = true;
b = (e1 < tol && e2 < tol && e3 < tol);
} while (e1 >= tol || e2 >= tol || e3 >= tol);