从用户输入读取堆栈的整数

时间:2014-03-09 03:48:26

标签: java stack java.util.scanner

我正在尝试创建一个程序,该程序从扫描仪接收用户输入并将其推入堆栈,然后弹出每个元素并将其打印出来。这是我到目前为止的代码:

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

2 个答案:

答案 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());
}