我是java的新手,很抱歉,如果我的编程技巧很差。我的程序需要使用队列来模拟I / O缓冲区。它不断接受用户输入行。如果用户插入O(Oh),则返回输入的第一行。如果输入X,则需要结束。
这是我的计划:
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
Scanner input = new Scanner(System.in);
String check = input.nextLine();
do {
queue.add(check);
if(check.equals("O")) {
if(queue.peek() != null){
String remove = queue.remove();
System.out.println("Data: " + remove);
}
else if(queue.peek() == null) {
System.out.println("Buffer empty");
}
}
} while(!"X".equals(check)) ;
预期的输入输出是:
line1
line2
O
Data: line1
line3
line4
O
Data: line2
O
Data: line3
line5
O
Data: line4
O
Data: line5
O
Buffer empty
X
我的程序似乎没有执行我的if语句,因为它永远不会停止请求输入,也不会退出一次,而X由用户提供。
如果我遗漏了一些明显的东西,我很抱歉。
答案 0 :(得分:1)
问题是你需要在最后再次阅读输入,在if条件之后,你需要添加一行:
check = input.nextLine();
这样你就可以阅读下一个输入行,否则check将始终与输入的内容完全相同。
答案 1 :(得分:1)
首先,
String check = input.nextLine();
只被调用一次,而它应该在循环结束时再次调用。所以它没有更新。
答案 2 :(得分:1)
你的input.nextLine()
在循环之外,因此它只被调用一次,当在每次循环迭代时调用向队列添加输入时,这就是它发生的原因。改变方式:
String check;
do {
check = input.nextLine();
queue.add(check);