【发布时间】: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,从数组末尾开始,并在移到前面时附加字符。然后,返回字符串生成器实例。这应该会逐行为您提供堆栈的内容。