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

时间:2015-09-28 14:41:56

标签: java data-structures stack

我必须使用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());

    }


  }
}        

3 个答案:

答案 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)

如果你正在使用Java 8,那么Stack扩展了Iterable,所以只需迭代:

  

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

您还可以参考documentation