在 Java 中从一行接收多个 char 输入



我正在使用数组在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();
    }
}

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

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

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

编辑

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

  1. 您尚未确定循环应何时结束。
  2. 你会认为如果你按回车键而不输入任何循环会打破,但这不是next的运作方式。如果按回车键如果不输入任何内容或仅由空格组成的输入数据,next将在等待输入时阻塞扫描,即使先前对hasNext()的调用返回 true

解决方案是包括控制应脱离循环的条件。

最新更新