Stack:如何检查每个整数(在一个循环中)与另一个整数?

时间:2015-09-28 17:00:26

标签: java data-structures stack

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

2 个答案:

答案 0 :(得分:1)

你永远不应该遍历堆栈,它会破坏选择数据结构的整个目的。您想使用poppeek

while (!NumsInStack.empty()) {
    if (NumsInStack.peek() > val) {
        System.out.println("woot!");
        break;
    }
    NumsInStack.pop();
}

由于您只希望打印出最后一个更高的数字,所以您还应该在print语句后放置一个break;,以便在找到匹配项时突破循环。如果没有中断,它将打印所有更高的值。

答案 1 :(得分:1)

工作代码:

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

    }
}