控制for循环中的if-else语句

时间:2014-03-11 13:37:10

标签: java if-statement

static void merge(int []part1,int []part2,int []array)
{
    int index1=0;
    int index2=0;

    for(int k=0; k<array.length; k++)
    {
        if(index1==part1.length)
        {
            array[k]=part2[index2];
            index2++;
            System.out.println("fourth");
        }
        else if(index2==part2.length)
        {
            array[k]=part1[index1];
            index1++;
            System.out.println("third");
        }
        else if(part1[index1]<part2[index2])
        {
            array[k]=part1[index1];
            index1++;
            System.out.println("second");
        }
        else
        {
            array[k]=part2[index2];
            index2++;
            System.out.println("first");
        }
    }
}

part1part2长度为4,数组长度为8.在这种情况下,为什么“第二个”是第一个打印而不是“第一个”?

条件全是false,这就是else是第一个打印的原因吗?

我对else if感到困惑。

3 个答案:

答案 0 :(得分:1)

在if(condition)else if(condition2)else ...中,没有第一个/第二个被执行。这也不是特定于java的。仅执行条件为真的块。在这里你首先得到:

如果(index1之间== part1.length)

=&GT; index1 = 0

=&GT; part1.length = 4

所以这个条件是假的。

否则if(index2 == part2.length)

我们在这里有完全相同的情况,条件是假的

否则if(part1 [index1]&lt; part2 [index2])

除非我们知道输入数组中的内容,否则我们无法知道它是否为false,但根据您的注释,此条件为真,因此此块中的代码与System.out.println一起执行( “第二”);

想想这段代码试图实现的目标(我们将2个排序的数组合并到第3个也将被排序的数组中),理解它在循环内,并且对于每个循环迭代,它执行的是不同的阻止取决于条件。

答案 1 :(得分:0)

您在第三个条件下打印第二个,即在第一次for次迭代时,当数组中包含任何元素并且part1[0] < part2[0]

答案 2 :(得分:0)

当您链接if else条件为真的第一个块时,运行,而不是其他。

if(a) {
   x();
} else if(b) {
   y();
} else if(c) {
   z();
}
  • 如果a为true,则运行x(),而不运行其他方法。
  • 如果a为假且b为真,则运行y(),而不运行其他方法。
  • 如果a为false,则b为false,c为true,运行z(),没有其他方法。

可能有助于认识到上述内容相当于:

if(a) {
   x();
} else {
   if(b) {
      y();
   } else {
      if(c) {
         z();
      }
   }
}

这就是编译器如何解释它;然而,大多数人类读者发现第一个版本,支持更少,缩进更少,更容易阅读。


在您的代码中,如果&#34; second&#34;印刷后,我们可以确定第三个条件是真的。

第三个条件是:

 part1[index1]<part2[index2]

第一次循环时,index1和index2都为零,因此当part1的第一个元素小于part2的第一个元素时,此块会运行。

您可以通过在&#34; second&#34;:

之上添加另一个调试println来确认这一点
  System.out.println( "part1[" + index1 + "]=" + part1[index1]);
  System.out.println( "part2[" + index2 + "]=" + part2[index2]);  
  System.out.println("second");

但请注意,使用println进行调试是一个不好的习惯 - 尽可能快地学习使用调试器。