[英]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");
}
}
}
part1
和part2
長度是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();
}
可能有助於了解以上內容等同於:
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.