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 期間改變“堆?!钡拇笮 Mㄟ^調用 stack.pop() 您違反了該規則。而不是 for(Characater c : stack) 使用:
while(!stack.empty()){
sb.append(stack.pop());
}
添加回答
舉報