2015-10-16 90 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;