我必须使用Stack实现一个程序,它允许用户输入一个正整数n
,然后输入n
个整数。然后程序应允许用户输入另一个整数val
,之后程序应显示最后一个大于val
的值。根据我对该程序的理解,我发现它应该将堆栈顶部的每个元素与val
进行比较。因此,要将每个元素与val
进行比较,它应该从顶部开始迭代堆栈中的值。我真的不知道怎么做这项工作所以如果能得到任何帮助我会很高兴。这是我的计划:
public class MyClass{
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
Stack<Integer> NumsInStack= new Stack<Integer>();
int n, num, val;
System.out.println("Please enter n.");
n=sc.nextInt();
for(int i=0; i<n;i++){
num=sc.nextInt();
NumsInStack.push(num);
}
System.out.println("Enter a value.");
val=sc.nextInt();
for(int i=0; i<NumsInStack.size();i++){
if(NumsInStack.peek()>val)
System.out.println("The number greater than "+val+" is "+NumsInStack.peek());
}
}
}
答案 0 :(得分:1)
你永远不应该遍历堆栈,它会破坏选择数据结构的整个目的。您想使用pop
和peek
:
while (!NumsInStack.empty()) {
if (NumsInStack.peek() > val) {
System.out.println("woot!");
break;
}
NumsInStack.pop();
}
由于您只希望打印出最后一个更高的数字,所以您还应该在print语句后放置一个break;
,以便在找到匹配项时突破循环。如果没有中断,它将打印所有更高的值。
答案 1 :(得分:1)
工作代码:
import java.util.*;
public class MyClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack<Integer> NumsInStack = new Stack<Integer>();
int n, num, val;
System.out.println("Please enter n.");
n = sc.nextInt();
for (int i = 0; i < n; i++) {
num = sc.nextInt();
NumsInStack.push(num);
}
System.out.println("Enter a value.");
val = sc.nextInt();
while ( !NumsInStack.empty()){
int stackElement = NumsInStack.pop();
if ( stackElement > val){
System.out.println("Stack Element > value :"+stackElement+":"+val);
break;
}
}
}
}