簡體   English   中英

在for循環中控制if-else語句

[英]Control if-else statements inside for loop

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。在這種情況下,為什么“ second”是第一個打印而不是“ first”?

條件全為false ,這就是為什么else是第一個打印的?

else if我一點也不困惑。

在if(condition)else if(condition2)else ...中,沒有第一個/第二個要執行。 同樣,這不是真的特定於Java。 僅條件為真的塊將被執行。 您首先在這里有:

如果(索引1 == part1.length)

=>索引1 = 0

=> part1.length = 4

所以這個條件是錯誤的。

否則if(index2 == part2.length)

這里有完全相同的情況,條件為假

否則if(part1 [index1] <part2 [index2])

在這里,除非我們知道輸入數組中的內容,否則我們將不知道它是否為false,但是根據您的評論,此條件為true,因此,此塊中的代碼與System.out.println(“ second” );.

想一想這段代碼想要實現的目的(我們將2個已排序的數組合並到將要排序的第三個數組中),了解它在一個循環中,並且對於每個循環迭代,它會根據執行不同的塊條件。

您在第三個條件下打印第二個,即在第一個條件下for迭代(當數組中包含任何元素時)並且part1[0] < part2[0]

當要鏈接if else第一塊,其條件為真,總是會自動運行,並沒有其他。

if(a) {
   x();
} else if(b) {
   y();
} else if(c) {
   z();
}
  • 如果a為true,則運行x(),並且不運行其他方法。
  • 如果a為false而b為true,則運行y(),並且不使用其他方法。
  • 如果a為假,b為假,c為真,運行z()且沒有其他方法。

可能有助於了解以上內容等同於:

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

從字面上看,這就是編譯器解釋它的方式。 但是,大多數人類讀者發現第一個版本的括號和縮進更少,更易於閱讀。


在您的代碼中,如果打印“ second”,則可以確定第三個條件為true。

第三個條件是:

 part1[index1]<part2[index2]

第一次在循環中,index1和index2均為零,因此,當part1的第一個元素小於part2的第一個元素時,此塊運行。

您可以通過在“ second”上方添加另一個調試println來確認這一點:

  System.out.println( "part1[" + index1 + "]=" + part1[index1]);
  System.out.println( "part2[" + index2 + "]=" + part2[index2]);  
  System.out.println("second");

但是請注意,使用println進行調試是一種不好的習慣-盡快學會使用調試器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM