Java- 堆栈:如何将循环中堆栈中的值与特定值进行比较?

Java- Stack: how to compare values from a stack in a loop to a particular value?

我必须使用 Stack class 实现一个程序,它允许用户输入一个正整数,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());

    }


  }
}        

您正在使用的堆栈也是一个 Vector,因此它获得堆栈具有的所有方法 Vector 具有的所有方法。

Iterator<Integer> stackIterator = NumsInStack.iterator();

while (stackIterator.hasNext()) {
  Integer item = stackIterator.next();
  // do whatever
}

请记住,最好不要命名以大写字母开头的变量(这样很难区分 类 和变量),除非变量是常量,在这种情况下,名称它全部为大写字母,并用下划线分隔单词。

关于如何循环有很多变体; Vector 几乎支持所有这些,这意味着您不必使用迭代器。查看 Stack 的 Javadoc 底部以查看 Stack 继承的所有方法(您可能正在滚动它们)

Stack class 允许 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);
}

另请参阅

  • How would I iterate a stack in java

如果你使用的是 Java 8,Stack extends Iterable,所以只需迭代:

for (int x : NumsInStack) { ... }

也可以参考documentation.