Java堆栈推写方法-目前获得奇怪的输出
所以,我正试图重写这段代码。其思想是从输入文件中输入行,一次处理一个字符,然后将字符推到堆栈上。无论如何,我的push方法可能不起作用,因为我的show方法似乎也不起作用。如有任何建议,将不胜感激Java堆栈推写方法-目前获得奇怪的输出,java,stack,Java,Stack,所以,我正试图重写这段代码。其思想是从输入文件中输入行,一次处理一个字符,然后将字符推到堆栈上。无论如何,我的push方法可能不起作用,因为我的show方法似乎也不起作用。如有任何建议,将不胜感激 while ((fileIO.hasNextLine())) { scanner = new Scanner(fileIO.getNextLine()); if (scanner.hasNextLine()) { String line = scanner.nextLi
while ((fileIO.hasNextLine())) {
scanner = new Scanner(fileIO.getNextLine());
if (scanner.hasNextLine()) {
String line = scanner.nextLine();
StackADT stack = new StackADT(line.length());
for (int i = 0; i < line.length(); i++) {
char x = line.charAt(i);
stack.push(x);
}
fileIO.writeToOutput(stack.show(stack.toString()));
}
}
public void writeToOutput(char output){
printer.println(output);
}
public void push(char x) {
if (!isEmpty()) {
a[top] = x;
top++;
} else {
return;
}
}
public char show(String stack) {
char[] cArray = stack.toCharArray();
char x = '\\';
for (int i = 0; i < cArray.length; i++) {
x = cArray[i];
}
return x;
}
输出:
f
b
4
1
b
8
编辑
我将show()中的for循环更改为
@Overrride
public char show(String stack) {
char[] cArray = stack.toCharArray();
char x = '\\';
for (int i = cArray.length; i >= 0; i--) {
x = cArray[i];
}
return x;
}
推动这一点
public void push(char x) {
a[top] = x;
top++;
}
至于输出,目前我只是想检查输入是否正确。将来,它将需要通过另一个类来完成输出。您的push方法不起作用:如果堆栈不是空的,它只会将内容推到堆栈顶部。因为堆栈一开始是空的,所以它永远不会添加任何内容 对于您奇怪的输出:如果您没有覆盖
StackADT
类的toString()
方法,则stack.toString()
的结果将类似于StackADT@54bedef2
,其后几乎是随机的十六进制数字
由于您的
stack.show(…)
方法只返回此字符串的最后一个字符,因此您的输出将始终是一个单(随机)十六进制数字。如果您也发布了预期的输出,可能会有所帮助。我可以看到的一点是,您的推送操作会在列表的后面添加一个元素,然后将计数器向前移动。但是,您的show
方法从最底部开始,而不是从顶部开始(您的for
循环需要从末尾开始,然后返回)。此外,您的show方法一次只能为整个堆栈生成1个字符。使用StringBuilder
,从数组末尾开始,移动到前面时追加字符。然后,返回字符串生成器实例。这应该逐行给出堆栈的内容。这解释了为什么输出包含数字。我花了一段时间才弄明白。
public void push(char x) {
a[top] = x;
top++;
}