我必须使用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());
}
}
}
答案 0 :(得分:1)
您正在使用的堆栈也是一个Vector,因此它可以获得堆栈具有和所有方法的所有方法。
Iterator<Integer> stackIterator = NumsInStack.iterator();
while (stackIterator.hasNext()) {
Integer item = stackIterator.next();
// do whatever
}
请记住,最好不要用大写字母命名变量(它使得很难区分类和变量),除非变量是常量,在这种情况下,用全大写字母命名,并强调要将单词分开。
如何循环有很多变种;和Vector几乎支持所有这些,这意味着你不必使用迭代器。查看Javadoc for Stack的底部以查看Stack继承的所有方法(您可能正在滚动它们)
答案 1 :(得分:0)
Stack类允许Iterator迭代其元素。
Stack<Integer> NumsInStack= new Stack<Integer>();
Iterator<Integer> iter = NumsInStack.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
除此之外,您可以使用enhanced-for loop
for(Integer i : NumsInStack)
{
System.out.println(i);
}
答案 2 :(得分:0)