我從算法1通過塞奇威克使用具有方法isEmpty()
這是爲了確定是否有再留在標準輸入到過程參數的stdlib.jar庫運行的程序。java中的掃描器如何返回到hasNext()?
這裏是包含在類的源文件代碼的代碼稱爲StdIn
:
public static boolean isEmpty() {
return !scanner.hasNext();
}
,如果我在命令行中的Windows編譯成功後鍵入以下參數:
10 2 4 6 8 9 0
並按回車鍵,該程序從一個while循環的主要功能和StdOut.println(p + " " + q);
工作正常行正確處理數據。
public static void main(String[] args) {
int N = StdIn.readInt();
QuickUnionUF uf = new QuickUnionUF(N);
while (!StdIn.isEmpty()) {
int p = StdIn.readInt();
int q = StdIn.readInt();
if (uf.connected(p, q)) continue;
uf.union(p, q);
StdOut.println(p + " " + q);
}
}
但是,包含條件(!StdIn.isEmpty())
while循環永遠不會成爲真正的和打印答案後,只是掛等待更多的輸入。這意味着while條件永遠不會確定從命令行輸入的結束。
問題
我如何告訴節目我已經完成了我的論點,並沒有更多的投入?是否有一個特殊的轉義序列,我需要在最後一個參數後面的Windows命令行鍵入?還是有一個標準的方式來告訴完成的命令行參數的掃描儀輸入?
如果您使用控制檯作爲輸入緩衝器,它永遠不會是空的。您需要編寫一些用戶可以輸入的退出代碼,退出程序。 –
嘗試按CTRL-Z https://en.wikipedia.org/wiki/End-of-file即可以結束控制檯輸入。 – zapl
'StdIn'中的'Scanner'很可能使用'System.in'流,JVM進程正在使用它來通常從控制檯讀取數據。但是,我們什麼時候可以100%確定在該流中不會有用戶輸入?由於用戶可能正在通過控制檯寫入一些數據,因此System.in需要等到a)用戶按回車併發送他的數據b)System.in將檢測到該流已關閉(這意味着不再有數據可以使用從中讀取)。在情況B你可以使用像http://stackoverflow.com/a/33084716/1393766 – Pshemo