【问题标题】:Java Stack push write methods - getting weird output at the momentJava Stack 推送写入方法 - 目前得到奇怪的输出
【发布时间】:2023-03-20 21:51:01
【问题描述】:

所以,我正在尝试重写此代码。这个想法是从输入文件中输入行,一次处理一个字符并将字符压入堆栈。 (稍后会出现逻辑。)无论如何,我的 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;
}

输入(为简洁起见缩写):

ABB
AAABBB
AB
ABABABA
ABAB
BBAA

输出:

f
b
4
1
b
8

编辑 我将 show() 中的 for 循环更改为 this..

@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 将一个元素添加到列表的后面,然后将计数器向前移动。但是您的 show 方法从最底部开始,而不是从顶部开始(您的 for 循环需要从最后开始并返回)。
  • 除上述之外,您的 show 方法一次只为整个堆栈生成 1 个字符。使用StringBuilder,从数组末尾开始,并在移到前面时附加字符。然后,返回字符串生成器实例。这应该会逐行为您提供堆栈的内容。

标签: java stack


【解决方案1】:

您的 push 方法不起作用:如果堆栈不为空,它只会将内容推送到堆栈顶部。由于堆栈一开始是空的,它永远不会添加任何东西。

对于你奇怪的输出:如果你没有覆盖 StackADT 类的 toString() 方法,stack.toString() 的结果将类似于 StackADT@54bedef2,在 @ 符号之后几乎是随机的十六进制数字.

由于您的 stack.show(...) 方法仅返回此字符串的最后一个字符,因此您的输出将始终是单个(随机)十六进制数字。

【讨论】:

  • 这解释了为什么输出包含数字。我花了一段时间才弄清楚。
猜你喜欢
  • 1970-01-01
  • 2014-12-03
  • 2017-06-24
  • 2013-06-25
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2012-11-19
相关资源
最近更新 更多