【发布时间】:2021-01-21 17:13:45
【问题描述】:
所以基本上我正在编写一个简单的程序,用户输入一个字符串,然后将该字符串转换为一个列表,其中倒数第二个元素的每次出现都被最后一个替换。
所以如果程序输入 a b c a b c 程序输出 a c c a c
这是我到目前为止得到的,但由于某种原因我无法运行该程序,我想知道我做错了什么。
public static void main(String args[])
{
Scanner input = new Scanner (System.in);
System.out.println("Enter in list");
String s = input.nextLine();
List<String> list = new ArrayList<String>(Arrays.asList(s.split(" ")));
String replacewith;
String replace;
replacewith = list.get(list.size()-1);
replace = list.get(list.size()-2);
Iterator<String> iterator = list.iterator();
int i = 0;
while(iterator.hasNext()) {
String value = iterator.next();
if(value.equals(replace))
{
iterator.remove();
list.add(i,replacewith);
}
i++;
}
System.out.println(list);
}
【问题讨论】:
-
迭代器期望只有对列表的修改将通过该迭代器完成(直到它完成迭代)。所以你不能在迭代没有完成的时候使用
list.add(i,replacewith);。 -
@Pshemo 啊我明白了,你知道我将预期值添加到该索引的另一种方法吗?
-
老实说,我不确定我是否正确理解了您的任务。由于任务是“倒数第二个元素的每次出现都替换为最后一个”
a b c a b c(6 个字符,第二个是b)如何变成a c c a c(为什么是 5 个字符?为什么a没有被替换?) -
无论如何,如果你想在迭代时替换一些元素,你可以使用
ListIterator而不是Iterator并调用它的set(newValue)方法。 -
@Pshemo 谢谢!我完全忘记了 List Iterator,是的,你误解了我想要做的事情,但不用担心,因为你给出了正确的解决方案。
标签: java list arraylist iterator