2016-09-26 96 views
0

我是新來的java,很抱歉如果我的編程技能很差。我的程序需要使用一個隊列來模擬一個I/O緩衝區。它不斷接受用戶輸入的線路。如果用戶插入一個O(哦),它將返回輸入的第一行。如果輸入X,它需要結束。我的do-while循環似乎沒有執行我的if語句

這是我的計劃:

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由用戶給出。

對不起,如果我失去了明顯的東西。

+4

'它永遠不會停止要求輸入' - 不可能的。輸入部分在**循環之前是**,它只需要輸入一次,如果輸入與「X」不同,則會出現無限循環。也許你發佈了一箇舊版本的代碼? – BackSlash

回答

1

您的input.nextLine()不在循環中,因此只有在每次循環迭代時調用將輸入添加到隊列時纔會調用一次,這就是爲什麼發生這種情況的原因。改變它:

String check; 
do { 
    check = input.nextLine(); 
    queue.add(check); 
+0

非常感謝,這確實有幫助! –

1

的問題是,你需要在年底再次讀取輸入時,如果條件之後,你需要添加一行:

check = input.nextLine(); 

這樣你讀下inputline,否則檢查將永遠是這是第一件進入的東西。

+1

謝謝,這真的幫助了我! –

1

首先,

String check = input.nextLine(); 

只調用一次,而應該在循環結束時再次調用。所以它沒有更新。

+0

非常感謝你的解釋,這很有道理。我將如何再次打電話?簡單地說:String check = input.nextLine();在底部 –

+0

Nah,只有check = input.nextLine();因爲你沒有聲明另一個字符串。 –