方法nbGreaterThanFirst,它返回myStack中大于或等于myStack顶部元素的元素数。假设堆栈的顶部是5,并且有元素是7,3和9.它应该返回9,因为它大于堆栈中的其余元素。算法的步骤对我来说似乎没问题,但它没有用。有什么建议吗?
import java.util.Stack;
public class greaterStack {
public static int nbGreaterThanFirst(Stack<Integer> myStack) {
int firstStack = myStack.peek(); // firstStack = 5
for(int i=0; i<myStack.size(); i++) {
if(myStack.peek() >= firstStack) { // if any element is greater than 5
firstStack = myStack.peek();
myStack.pop();
}
}
return firstStack;
}
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
s.push(1);
s.push(3);
s.push(7);
s.push(5);
System.out.println(nbGreaterThanFirst(s));
}
}
答案 0 :(得分:0)
在循环中,只有当堆栈顶部是&gt; =当前的firstStack变量时,才会弹出元素。因此,只要您获得一个值低于当前firstStack值的元素,您的算法就不允许弹出元素并停止移动堆栈。
对于元素5,7,3,9的堆栈,只要你点击“3”,它就会失败你的if条件,并且不会从堆栈中弹出更多的元素。因此,你永远不会达到“9”元素。
我的建议是将pop()移出if条件。每次迭代都弹出一次,以便检查所有元素。
int stackSize = myStack.size();
for(int i=0; i<stackSize; i++) {
if(myStack.peek() >= firstStack) { // if any element is greater than 5
firstStack = myStack.peek();
}
myStack.pop();
}