数据结构Java堆栈:如何将循环堆栈中的值与特定值进行比较?
我必须使用Stack类实现一个程序,该类允许用户输入一个正整数n
,后跟n
整数。然后程序应允许用户输入另一个整数val
,然后程序应显示大于val
的最后一个值。
根据我对该程序的理解,我发现它应该将堆栈顶部的每个元素与val
进行比较。因此,要将每个元素与val
进行比较,它应该从顶部开始遍历堆栈中的值。我真的不知道如何使这项工作,所以如果我能得到任何帮助,我会很高兴。
这是我的节目:
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();
for(int i=0; i<NumsInStack.size();i++){
if(NumsInStack.peek()>val)
System.out.println("The number greater than "+val+" is "+NumsInStack.peek());
}
}
}
# 1 楼答案
您使用的堆栈也是一个向量,因此它会获取堆栈中所有的方法和向量中所有的方法
请记住,最好不要以大写字母开头命名变量(这使得它们很难区分类和变量),除非变量是常量,在这种情况下,使用所有大写字母命名变量,并用下划线分隔单词
有很多关于如何循环的变体;Vector几乎支持所有这些,这意味着你不必使用迭代器。查看Javadoc for Stack的底部,查看堆栈继承的所有方法(您可能正在滚动它们)
# 2 楼答案
如果您使用的是Java 8,Stack扩展了Iterable,所以只需迭代:
你也可以参考documentation
# 3 楼答案
堆栈类允许迭代器对其元素进行迭代
除此之外,还可以使用enhanced-for loop
另见