从java中的单行接收多个char输入

时间:2017-10-27 22:22:47

标签: java java.util.scanner

我正在使用数组在java中编写堆栈数据结构。问题是当我尝试推送用户字符输入时它没有显示。问题出在这个代码上。

public static void preSuf(Stack stack) {
    Scanner key = new Scanner(System.in);
    System.out.println("enter the values");



       while(key.hasNext()){    
          char c = key.next().charAt(0);
          stack.push(c);
        }



}

当我将while(key.hasNext())更改为if(key.hasNext())时,它可以正常工作,但它只会打印一次并且不会显示。我该如何解决这个问题,谢谢。

编辑:这是整个代码

    import java.util.Scanner;

public class Stack {

    private int top;
    private char[] container;
    private int size;
    public static int pos = 0;

    // constructor
    public Stack(int N) {
        container = new char[N];
        size = N;
        top = 0;
    }

    public boolean isFull() {
        return (size == top);
    }

    public void push(char string) {
        if (!isFull()) {
            container[top] = string;
            top++;
        } else {
            return;
        }

    }

    public int pop() {
        int drop;
        drop = container[top - 1];
        container[top] = 0;
        top--;
        return drop;
    }

    public int peek() {
        int drop2;
        drop2 = container[top - 1];
        return drop2;
    }

    public void display() {

        for (int i = 0; i < container.length; i++) {
            if (container[i] != 0) {
                System.out.print(container[i]);
            }
        }

    }

    public static void preSuf(Stack stack) {
        Scanner key = new Scanner(System.in);
        System.out.println("enter the values");



            while(key.hasNext()){    
              char c = key.next().charAt(0);
              stack.push(c);

            }



    }

    public static void main(String args[]) {
        Stack stack = new Stack(3);
        preSuf(stack);
        stack.display();
        stack.display();
        System.out.println();

    }

}

2 个答案:

答案 0 :(得分:0)

问题在于您没有编写任何代码来实际打印堆栈内容。

你可以在while循环之后编写一个循环来迭代堆栈并打印出每个字符。

您还需要一种退出while循环的方法。您可以使用特殊字符执行此操作,例如。 if(c == '.') break;或者您只需按Ctrl + Z即可。

编辑:基于对问题的编辑和正在呈现的完整代码,我认为需要额外循环的建议现在是多余的。你在stack.display()中有这个。您只需退出while循环。

答案 1 :(得分:0)

  1. 你还没确定循环何时结束。
  2. 您认为如果按Enter键而不输入任何循环 会破坏但不是next的运作方式。如果按Enter键 如果没有输入任何内容或仅包含空格的输入数据,next将在等待输入时阻塞 扫描,即使先前的hasNext()调用返回 true
  3. 解决方案是包括一个控制应该从循环中突破的条件。