2013-11-02 120 views
0

这里是问题:Java中的for循环?

编写一个方法stutter,它将一个String的ArrayList作为参数,并用两个字符串替换每个字符串。例如,如果列表在调用该方法之前存储值{“how”,“are”,“you?”},则应该存储值{“how”,“how”,“are”,“are” ,“你?”,“你?”}在方法结束执行后。

我的代码:

public void stutter(ArrayList<String> list){ 

    for(int i = 0; i < list.size() * 2; i+=2){ 
     list.add(i, list.get(i)); 
    } 
} 

然而,我的代码给出了一个IndexOutofBounds错误。正确的代码应该有for循环:

for (int i = 0; i < list.size(); i += 2) { 

为什么我的代码错了?当我看到正确的答案时,我觉得这是错误的,因为你每次增加i两次。所以,当你第三次循环时,这不会是什么意思,i会是4,那会比list.size()是3还要大?

在旁注中,在for循环中,当您重复循环多次时,list.size()的值是否更改?或者它会在整个for循环过程中持续保持三次?

回答

5

“正确”代码中的'技巧'是每次将成员添加到列表中时,size()会增长....因此,到达结束时你已经将列表的大小加倍了。

这里的关键组件是环形的端部条件:i < list.size()评估时间的循环迭代,每一次它是不同的,因为环的内侧增加的内容。