我想在Java中使用pop方法。我期望按順序看到字符串"c", "b", "a"
。但是,它只能無限打印出"c"
。爲什麼會發生?在初始化for循環時彈出一個隊列的元素最終彈出相同的元素
Stack<String> a = new Stack<>();
a.push("a");
a.push("b");
a.push("c");
for(String i = a.pop(); !a.isEmpty() ;){
System.out.println(i);
}
我想在Java中使用pop方法。我期望按順序看到字符串"c", "b", "a"
。但是,它只能無限打印出"c"
。爲什麼會發生?在初始化for循環時彈出一個隊列的元素最終彈出相同的元素
Stack<String> a = new Stack<>();
a.push("a");
a.push("b");
a.push("c");
for(String i = a.pop(); !a.isEmpty() ;){
System.out.println(i);
}
您忘記了for循環的「increment」部分。你已經獲得了初始化部分(調用一次,這就是爲什麼i
永遠保持c
)和條件部分,但是你錯過了循環每次迭代執行的最後一部分。
的但是不是編寫for(String i = a.pop; !a.isEmpty(); i = a.pop())
我建議使用更貼合while循環
while(!a.isEmpty())
System.out.println(a.pop());
替換:
for(String i = a.pop(); !a.isEmpty() ;)
有:
for(String i = a.pop(); !a.isEmpty() ; i = a.pop())
正因爲如此,你不能在i
替代的價值,而且還是在棧中的元素。所以你只是得到一個無限循環,並顯示你彈出的最後一個值,即「c」。
其實l具備不會被遺忘。我認爲流行可以用於增量部分,但它根本不合邏輯。 – deeperwhite
你是什麼意思,這不合乎邏輯?與'for(int i = 0; i <10;)'比較,很容易看出它爲什麼失敗。 – Kayaman
@deeperwhite'pop'對於增量部分是很好的,但你沒有。 – AntonH