0

这是问题所在:

编写一个 stutter 方法,将字符串的 ArrayList 作为参数,并将每个字符串替换为该字符串中的两个。例如,如果列表在调用方法之前存储了值 {"how"、"are"、"you?"},它应该存储值 {"how"、"how"、"are"、"are" , "you?", "you?"} 方法完成执行后。

我的代码:

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每次都会增加 2。那么这是否意味着您第三次循环时i会是 4 并且会大于 list.size() 的 3?

附带说明一下,在for循环中,当您重新循环多次时, list.size() 的值会改变吗?还是会在整个for循环过程中始终保持在三?

4

1 回答 1

5

“正确”代码中的“技巧”是每次将成员添加到列表时, size() 都会增长....结果,当您到达循环结束时,您拥有列表的大小翻了一番。

这里的关键部分是循环的结束条件:每次i < list.size()循环迭代时都会评估,并且每次都不同,因为循环内部添加了内容。

于 2013-11-02T21:31:27.120 回答