Java 堆栈:如何对照另一个整数检查每个整数(在循环中)?

Java 堆栈:如何对照另一个整数检查每个整数(在循环中)?,java,data-structures,stack,Java,Data Structures,Stack,我必须使用堆栈实现一个程序,允许用户输入一个正整数,n,后跟n整数。然后,程序应允许用户输入另一个整数,val,然后程序应显示大于val的最后一个值。根据我对程序的理解,我发现它应该将堆栈顶部的每个元素与val进行比较。因此,要将每个元素与val进行比较,它应该从顶部开始遍历堆栈中的值。我真的不知道如何使这项工作,所以如果我能得到任何帮助,我会很高兴。这是我的节目: public class MyClass{ public static void main(String[] args)

我必须使用堆栈实现一个程序,允许用户输入一个正整数,
n
,后跟
n
整数。然后,程序应允许用户输入另一个整数,
val
,然后程序应显示大于
val
的最后一个值。根据我对程序的理解,我发现它应该将堆栈顶部的每个元素与
val
进行比较。因此,要将每个元素与
val
进行比较,它应该从顶部开始遍历堆栈中的值。我真的不知道如何使这项工作,所以如果我能得到任何帮助,我会很高兴。这是我的节目:

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());
        }
    }
}
公共类MyClass{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
Stack NumsInStack=新堆栈();
int n,num,val;
System.out.println(“请输入n.”);
n=sc.nextInt();

对于(int i=0;i您不应该在堆栈上进行迭代,这会破坏选择该数据结构的全部目的。您要使用
pop
peek

while (!NumsInStack.empty()) {
    if (NumsInStack.peek() > val) {
        System.out.println("woot!");
        break;
    }
    NumsInStack.pop();
}
由于您只希望它打印出最后一个更高的数字,因此还应在print语句后添加一个
break;
,以便它在找到匹配项时跳出循环。如果没有break,它将打印所有更高的值。

工作代码:

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

        while ( !NumsInStack.empty()){
            int stackElement = NumsInStack.pop();
            if (  stackElement > val){
                System.out.println("Stack Element > value :"+stackElement+":"+val);
                break;
            }
        }

    }
}
import java.util.*;
公共类MyClass{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
Stack NumsInStack=新堆栈();
int n,num,val;
System.out.println(“请输入n.”);
n=sc.nextInt();
对于(int i=0;ival){
System.out.println(“堆栈元素>值:“+stackElement+”:“+val”);
打破
}
}
}
}

运行程序时会发生什么?调试器会告诉你什么?堆栈实现了iterable接口。因此,获取迭代器实例并进行迭代。@CPerkins它不起作用,因为我的代码只检查最后一个元素是否大于
val
。如果不大于,它将在那里终止,而不是从中检查其他元素请不要在堆栈上重复,请记住Java中标识符的命名约定。具体来说,变量名称不应以大写字母开头。
numinstack
应为
numinstack