我試圖通過Scanner
對象讀取命令。爲了檢查輸入語法I,使用sc.hasNext()
(對於缺少命令的情況)。它在許多情況下都能正常工作,但現在我已將JavaAPI中描述的情況描述爲「可能會阻止並等待輸入」。hasNext() - 它什麼時候阻塞,爲什麼?
什麼時候hasNext()
方法阻塞,我該如何控制它?有趣的事情是,它的工作完全正常,前3塊的情況下。此外,JavaAPI將hasNext()
描述爲用於檢查是否存在另一個輸入的正確方法,以便方法next()
不生成Exception
。
這裏是我沒產生至今代碼:提前
if (sc.hasNext() && sc.next().equals("create")) {
if (sc.hasNextInt()) {
width = sc.nextInt();
if (width > 0) {
if (sc.hasNextInt()) {
heigth = sc.nextInt();
if (heigth > 0) {
if (sc.hasNext()) { //At this point the hasNext Statement blocks for //no reason till an Input is made.
charset = sc.next();
Image = new AsciiImage(width, heigth,charset);
} else {
ret = false;
System.out.println("INPUT MISMATCH");
}
} ...//and so on
謝謝你,我無法找到關於這一主題的我自己的東西。 編輯:掃描儀被定義爲System.in,但這不應該是一個問題 - 至少它現在還沒有。
如果沒有可用的輸入,你認爲'hasNext'應該返回什麼?如何知道是否會*成爲下一個標記,除非通過阻塞直到它看到流結束或下一個標記? –
當且僅當此掃描程序具有API所示的另一個令牌時才爲true。有點奇怪......我應該用什麼來代替? 另外,它可以在我的程序中處理其他所有hasNext語句 - 在其他情況下:無輸入 - >假 - >中斷。 – Haini
目前尚不清楚你想要做什麼。您需要了解掃描器基於流式輸入 - 如果當前沒有可用數據但流未關閉,則稍後可能會有更多數據...並且需要等待該信息才能返回任何內容有用。 –