在while循环中满足两个条件

时间:2016-10-21 20:25:23

标签: java while-loop

我用Java执行一个进程。该进程永远不会终止并扫描机器查找某个文件,当它发现其中一个文件打印文件的路径时。我想在一段时间内执行该过程并获得输出。这是我的一段代码

  BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
Process p = pb.start();
    while ((System.currentTimeMillis() <= endTime )){ //loop 1
     while((line=stdInput.readLine()) != null){ loop 2
        System.out.println(line);
       }
    }
p.destroy();

问题是,如果脚本在短时间内没有找到结果,那么2将退出并且在此期间不会再次运行。

我也试过

while ((System.currentTimeMillis() <= endTime ) || (line=stdInput.readLine()) != null))

但是在这种情况下,如果stdInput.readLine()仍然返回结果,即使时间结束,循环也不会结束。

while ((System.currentTimeMillis() <= endTime ) && (line=stdInput.readLine()) != null))

在这种情况下,即使时间没有结束,如果line=stdInput.readLine()没有返回结果,循环也会退出

修改 我试过这段代码

System.out.println("Before while");
while ((System.currentTimeMillis() <= endTime ){
        System.out.println("while");    
         if(line=stdInput.readLine())!= null){
          System.out.println("One line");
        }
    }
        p.destroy();

如果进程未检测到任何内容,则循环永远不会结束,这就是输出

确定 之前 而

的System.out.println(&#34;而&#34);被称为只有一次它应该被召唤5秒。

3 个答案:

答案 0 :(得分:2)

你的意思是:

while ((System.currentTimeMillis() <= endTime ){
    if(line=stdInput.readLine())!= null){
        System.out.println(line);
    }        
}

答案 1 :(得分:0)

尽量不要使用短圈&amp;&amp;。

使用&amp;,这将确保检查两个条件。随着&amp;&amp;如果第一个是假的,整个事情都是短暂的。

你想让readLine()执行即使不对吗?与&amp;&amp;如果第一个条件为假,则永远不会考虑第二个条件。

&安培;将检查两者然后做出决定。

答案 2 :(得分:0)

如果stdInput来自扫描仪,它可能永远不会为空。再展示一下你的代码。

至于madmax所说的,是的,做短路。对于0和1 = 0,这意味着0和某事= 0。它是数学。