2016-07-09 131 views
1

我想解析一些競爭性編程問題的輸入測試用例,但程序只是坐着等待,即使我正在閱讀整行和「\ n」字符。Java:不能讓readline()工作

下面是代碼:

public static void main(String[] args) throws IOException { 
    String result = "", input = ""; 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    while((input = br.readLine()) != null){ 
     result += input; 
    } 
    System.out.print(result); 
} 

這是超級簡單,但它仍然無法正常工作。當我輸入(不含引號) 「1 2 3 4 5 6 7 8 9」然後按回車鍵,它只是等待更多的輸入。我怎樣才能使它工作,以便在我按下回車鍵後,程序離開while循環?

我可以爲多條線路做這項工作嗎?例如,在最後一個「\ n」之後,如果沒有更多字符,則跳出循環。

謝謝你的幫助。 :)

+0

爲什麼需要一個while循環? – alfasin

+1

這是2016年。你爲什麼不使用try-with-resources? – fge

+0

我想輸入可變數量的行。 – Misha

回答

1

在Windows上按enter,ctrl + z,在Linux上按ctrl + d或在Mac上按cmd + d

這些鍵盤快捷鍵用於在各自的操作系統中向操作系統發出EOF信號,然後通知操作系統,然後通知jvm。

另一種方式來做到這一點,而無需使用cmd + d是做java myprogram <<< "1 2 3 4 5 6 7 8 9"或將字符串文件調用myprogram.in然後做java myprogram < `cat myprogram.in`

2

只需撥打readLine()一次。你有一個循環。如果你一次打電話,它應該讀一行。

這裏是readLine()文檔:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

這雕像,它將返回只有在達到流的末尾,null。由於您正在使用System.in作爲輸入流,因此只需按Enter即可達到最終效果。

+0

感謝您幫助我意識到我可以通過以下方式結束'System.in'輸入流只需按輸入 – Misha

+1

@Misha不,你不能。您可以根據您的系統輸入Ctrl/d或Ctrl/z來結束它。輸入僅終止一行。 – EJP

+0

對不起。錯字,我的意思是不能 – Misha