我正在使用数组在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();
}
}
答案 0 :(得分:0)
问题在于您没有编写任何代码来实际打印堆栈内容。
你可以在while
循环之后编写一个循环来迭代堆栈并打印出每个字符。
您还需要一种退出while循环的方法。您可以使用特殊字符执行此操作,例如。 if(c == '.') break;
或者您只需按Ctrl + Z即可。
编辑:基于对问题的编辑和正在呈现的完整代码,我认为需要额外循环的建议现在是多余的。你在stack.display()
中有这个。您只需退出while
循环。
答案 1 :(得分:0)
next
的运作方式。如果按Enter键
如果没有输入任何内容或仅包含空格的输入数据,next
将在等待输入时阻塞
扫描,即使先前的hasNext()
调用返回 true 。解决方案是包括一个控制应该从循环中突破的条件。