我正在使用数组在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
循环。
- 您尚未确定循环应何时结束。
- 你会认为如果你按回车键而不输入任何循环会打破,但这不是
next
的运作方式。如果按回车键如果不输入任何内容或仅由空格组成的输入数据,next
将在等待输入时阻塞扫描,即使先前对hasNext()
的调用返回 true。
解决方案是包括控制应脱离循环的条件。