我正在尝试将数据存储到堆栈中.如果我错了,请更正我,stack是一个Last in,first out类型.所以,期待我的程序输出有点逆转.但遗憾的是,输出结果不同.我不确定代码的哪一部分是错的.
请帮忙:|
码:
`
公共类CorruptQueue {
public static void LineUp(){
BufferedReader br = null;
try {
String line;
Stack nameStack = new Stack();
Stack statusStack = new Stack();
Stack stack = new Stack();
br = new BufferedReader(new FileReader("C:/Users/user/Desktop/School Files/Project/CorruptOffice/input.txt"));
while ((line = br.readLine()) != null) {
StringTokenizer stringTokenizer = new StringTokenizer(line, " ");
while (stringTokenizer.hasMoreElements()) {
String lineup = stringTokenizer.nextElement().toString();
String name = stringTokenizer.nextElement().toString();
String status = stringTokenizer.nextElement().toString();
nameStack.push(name);
statusStack.push(status);
System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());
/*StringBuilder sb = new StringBuilder();
sb.append("" + lineup);
sb.append(" " + name);
sb.append("" + status);
sb.append("\n\n");
System.out.println(sb.toString());*/
}
}
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args)
{
LineUp();
Run Code Online (Sandbox Code Playgroud)
}
INPUT:
阵容约翰经常
阵容鲍勃定期
阵容汤姆经常
阵容莎拉贵宾
阵容玛丽贵宾
阵容Joan VIP
阵容Bea VIP
阵容汉克经常
阵容艺术定期
阵容Daisy VIP
阵容马吕斯定期
阵容戴恩VIP
OUTPUT:
现在正常为约翰服务
现在正常为鲍勃服务
现在为汤姆定期服务
现在为Sarah提供VIP服务
现在为玛丽提供VIP服务
现在为Joan提供VIP服务
现在为Bea服务VIP
现在正常为汉克服务
现在定期为艺术服务
现在为Daisy提供VIP服务
现在正常为马吕斯服务
现在为丹麦人提供VIP服务
完成
您的堆栈操作似乎在这里
nameStack.push(name);
statusStack.push(status);
System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());
Run Code Online (Sandbox Code Playgroud)
现在,如果你在开始弹出任何东西之前将它们全部推出,那么你的筹码将会颠倒名字,但是你同时推送和弹出1个项目.
所以从本质上说,你推进name并status进入堆栈,但在你做其他的反之前,你只需将它们弹回并打印到控制台.
你的堆栈并没有真正做任何事情.
如果你真的想要反转你的输出,那就拿
System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());
Run Code Online (Sandbox Code Playgroud)
退出初始循环,然后将其置于新循环中.
nameStack.push(name);
statusStack.push(status);
System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());
Run Code Online (Sandbox Code Playgroud)
好.所以,你说,把名字推到堆栈上.然后立即从堆栈中弹出该名称.所以,是的,它是LIFO,但你的堆栈中只有一个元素.尝试将pop操作完全移到while循环之外.然后有另一个while循环,它保持弹出元素,直到你的堆栈为空.