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.
我必须使用 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.