Java堆栈推写方法-目前获得奇怪的输出

Java堆栈推写方法-目前获得奇怪的输出,java,stack,Java,Stack,所以,我正试图重写这段代码。其思想是从输入文件中输入行,一次处理一个字符,然后将字符推到堆栈上。无论如何,我的push方法可能不起作用,因为我的show方法似乎也不起作用。如有任何建议,将不胜感激 while ((fileIO.hasNextLine())) { scanner = new Scanner(fileIO.getNextLine()); if (scanner.hasNextLine()) { String line = scanner.nextLi

所以,我正试图重写这段代码。其思想是从输入文件中输入行,一次处理一个字符,然后将字符推到堆栈上。无论如何,我的push方法可能不起作用,因为我的show方法似乎也不起作用。如有任何建议,将不胜感激

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++;
}