4 回答

TA貢獻1831條經(jīng)驗 獲得超9個贊
您正在更改堆棧 ( stack.pop()),同時遍歷它。嘗試使用不同的循環(huán):
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條經(jīng)驗 獲得超5個贊
pop返回堆棧頂部的元素,然后刪除該元素。您不能在使用增強的 for 循環(huán)迭代集合時修改集合,因為如您所見,您將得到一個ConcurrentModificationException.
一種方法是使用while循環(huán)并遍歷堆棧直到耗盡:
while (!stack.empty()) {
sb.append(stack.pop());
}

TA貢獻1772條經(jīng)驗 獲得超8個贊
ConcurrentModificationExceptions 在您嘗試編輯正在迭代的內(nèi)容時發(fā)生。通過調(diào)用stack.pop()您正在從您當前正在循環(huán)的實體中刪除一個實體。
相反,我建議您遍歷堆棧直到它為空:
while (!stack.isEmpty()) {
sb.append(stack.pop());
}

TA貢獻1830條經(jīng)驗 獲得超3個贊
for-each 循環(huán)在后臺使用迭代器檢查“堆?!敝惺欠裼邢乱粋€元素,然后將“字符 c”的值設置為下一個元素。但是你不能在 foreach 期間改變“堆棧”的大小。通過調(diào)用 stack.pop() 您違反了該規(guī)則。而不是 for(Characater c : stack) 使用:
while(!stack.empty()){
sb.append(stack.pop());
}
添加回答
舉報