有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数据结构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());

    }


  }
}        

共 (3) 个答案

  1. # 1 楼答案

    您使用的堆栈也是一个向量,因此它会获取堆栈中所有的方法和向量中所有的方法

    Iterator<Integer> stackIterator = NumsInStack.iterator();
    
    while (stackIterator.hasNext()) {
      Integer item = stackIterator.next();
      // do whatever
    }
    

    请记住,最好不要以大写字母开头命名变量(这使得它们很难区分类和变量),除非变量是常量,在这种情况下,使用所有大写字母命名变量,并用下划线分隔单词

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

  2. # 2 楼答案

    如果您使用的是Java 8,Stack扩展了Iterable,所以只需迭代:

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

    你也可以参考documentation

  3. # 3 楼答案

    堆栈类允许迭代器对其元素进行迭代

    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);
    }
    

    另见