我正在尝试创建一个程序,该程序从扫描仪接收用户输入并将其推入堆栈,然后弹出每个元素并将其打印出来。这是我到目前为止的代码:
import java.util.*;
public class NumberReverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter numbers: ");
int number = sc.nextInt();
Stack<Integer> stack = new Stack<Integer>();
stack.push(number);
while (!(stack.isEmpty())) {
System.out.println(stack.pop());
}
}
}
答案 0 :(得分:1)
尝试更像这样的东西......
在您只读一次一次之前,这似乎是您希望用于数组的大小。在此之后,您不断将相同的数字推入堆栈,因为您从不提示用户输入任何其他数字。
下面的代码比你的代码更进一步,因为一旦你从用户那里学到了数字并设置了你的数组大小,你就会一遍又一遍地要求一个新的数字来填充你的数组,直到你的数组被填满。这可以通过提示用户在for循环中反复输入值来完成。
我不确定为什么你需要一个数组才能做你想做的事情,考虑删除数组并只使用输入的第一个数字作为for循环的边界而不是数组大小。数组数据结构实际上只是浪费空间,因为你唯一一次使用它就是使用它的长度作为for循环的停止点
public class NumberReverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter stack size: ");
int number = sc.nextInt();
int[] array = new int[number];
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0; i < array.length; i++){
System.out.println("Enter your number: ");
int value = sc.nextInt();
stack.push(value);
}
while (!(stack.isEmpty())) {
System.out.println(stack.pop());
}
}
}
根据以下评论,请考虑尝试类似下面的代码。您只打印出一个号码,原因与我上面列出的相同......
import java.util.*;
public class NumberReverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter how many numbers you want to place on the Stack: ");
int stackSize = sc.nextInt();
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0; i < stackSize; i++){
System.out.println("Enter numbers: ");
int number = sc.nextInt();
stack.push(number);
}
while (!(stack.isEmpty())) {
System.out.println(stack.pop());
}
}
}
答案 1 :(得分:0)
你必须迭代用户输入的所有数字,然后将它们推到堆栈上:
public static void main(String[] args) {
final Scanner sc = new Scanner(System.in);
System.out.print("Enter numbers (finish with something else): ");
final Stack<Integer> stack = new Stack<Integer>();
while (sc.hasNextInt())
stack.push(sc.nextInt());
while (!(stack.isEmpty()))
System.out.println(stack.pop());
}