【问题标题】:Why changing && to || is causing a variable to not be seen为什么将 && 改为 ||导致变量看不到
【发布时间】:2017-08-31 19:31:23
【问题描述】:

我正在做一些阅读文件的练习,我的任务是为不平衡的文件编写文件交错代码。所以如果我有这样的设置,它就可以正常工作:

while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null **&&** (inputLine2 = LineSequential.read(inFileStreamName2)) != null) 

注意 &&... 但如果我将其更改为 || netbeans 声明 inputLine2 尚未初始化(尽管它以这种方式看到 inputLine1 非常好):

while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null **||** (inputLine2 = LineSequential.read(inFileStreamName2)) != null)

现在,如果 inputLine1(这是来自文件 A 的数据)首先变为 null,我只会在 inputLine2(来自文件 B)中获取每隔一行。在每次循环迭代中,它都会跳过一行。我相当肯定这与我初始化 inputLine2.. 的位置有关:

while ((inputLine1 = LineSequential.read(inFileStreamName1)) != null || LineSequential.read(inFileStreamName2) != null) {           
    inputLine2 = LineSequential.read(inFileStreamName2);
    System.out.println(inputLine2);
    if(inputLine1 != null && inputLine2 == null){
    LineSequential.write(outFileStreamName, inputLine1);
    }else if(inputLine1 == null && inputLine2 != null){
        LineSequential.write(outFileStreamName, inputLine2);
    }
    else if(inputLine1 != null && inputLine2 != null){
       LineSequential.write(outFileStreamName, inputLine1);
       LineSequential.write(outFileStreamName, inputLine2); 
    }
}

【问题讨论】:

  • || 短路。请改用|
  • 明白了!谢谢!一条傻乎乎的小线…………

标签: java file loops while-loop


【解决方案1】:

Java 执行lazy/short-circuit evaluation。当您更改为|| 时,它所关心的只是确保一个是真实的。如果第一个条件为真,它将停止查看其余条件,使该变量为空。

一个好的经验法则是永远不要在条件内初始化变量,事情会变得一团糟。

【讨论】:

    【解决方案2】:

    这称为short-circuit evaluation。如果布尔表达式的值可以由一个操作数的结果确定,则不计算第二个操作数。

    在此示例中,您将在 &&|| 之间进行更改。要使&& 表达式为真,双方都必须为真,因此如果第一个为真,则评估双方(如果第一个为假,则会短路)。对于|| 表达式,必须满足至少一个条件;由于第一个是真的,第二个是什么都没有关系,所以它不会被评估。

    如果您反转左侧的真实性,您会观察到相反的情况:您的 || 表达式将按预期工作,但您的 && 表达式将导致 inputLine2 未初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 2015-02-28
      • 1970-01-01
      • 2015-11-06
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多