2015-10-16 95 views
1

鑑於代碼for-each循環迭代是向後

String[] p = { "A", "B", "C", "D" }; 
String b = ""; 

for (String q : p) 
    b = q + b; 

System.out.println(b); 

我想輸出將是 「ABCD」,但它是 「DCBA」

爲什麼?

回答

9

您的循環預置每個元素爲b。 即:

  • 前置 「A」 - > 「A」
  • 前置 「B」 - > 「BA」
  • 前加上 「C」 - > 「CBA」
  • 前置 「d」 - > 「DCBA」

如果你想獲得 「ABCD」,改變邏輯追加

for (String q : p) { 
    // b = q + b; // prepend 
    // b = b + q; // append 
    b += q;  // append, using the shorter `+=` notation 
} 
5

由於

b = q + b; 
  • q代表當前元素循環是從你的陣列獲得
  • b是以前串連

的結果,這意味着你在前面添加新零件的舊結果。

0

表達

q + b; 

裝置new element + old string

對於通過4元件陣列每次迭代中,值是

b = "A" + "" - resulting in "A" 
b = "B" + "A" - resulting in "BA" 
b = "C" + "BA" - resulting in "CBA" 
b = "D" + "CBA" - resulting in "DCBA" 

更改分配給 B = B + Q; 或 b + = q;