4 回答
TA贡献1831条经验 获得超9个赞
您正在更改堆栈 ( stack.pop()),同时遍历它。尝试使用不同的循环:
public static String reverse(String str)
{
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++)
stack.push(str.toCharArray()[i]);
}
while(!stack.isEmpty()){
sb.append(stack.pop());
}
return sb.toString();
}
TA贡献1876条经验 获得超5个赞
pop返回堆栈顶部的元素,然后删除该元素。您不能在使用增强的 for 循环迭代集合时修改集合,因为如您所见,您将得到一个ConcurrentModificationException.
一种方法是使用while循环并遍历堆栈直到耗尽:
while (!stack.empty()) {
sb.append(stack.pop());
}
TA贡献1772条经验 获得超8个赞
ConcurrentModificationExceptions 在您尝试编辑正在迭代的内容时发生。通过调用stack.pop()您正在从您当前正在循环的实体中删除一个实体。
相反,我建议您遍历堆栈直到它为空:
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
TA贡献1830条经验 获得超3个赞
for-each 循环在后台使用迭代器检查“堆栈”中是否有下一个元素,然后将“字符 c”的值设置为下一个元素。但是你不能在 foreach 期间改变“堆栈”的大小。通过调用 stack.pop() 您违反了该规则。而不是 for(Characater c : stack) 使用:
while(!stack.empty()){
sb.append(stack.pop());
}
添加回答
举报