我的do-while循环似乎没有执行我的if语句

时间:2016-09-26 12:39:55

标签: java

我是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由用户提供。

如果我遗漏了一些明显的东西,我很抱歉。

3 个答案:

答案 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);