一直在掙扎着這一天,來回閱讀論壇,沒有結果。任何人都可以告訴我爲什麼函數aMenu()的第二次調用返回一個零,而不是等待新的用戶輸入呢?我嘗試了各種各樣的東西,像hasNextInt(),nextLine(),沒有任何工作。在用戶寫入內容之前不應該hasNextInt()阻塞?我該如何解決這個問題?謝謝。掃描儀裏面的方法不等待回答
package FirstJavaPackage;
import java.util.Scanner;
public class testScanner
{
public static void main(String[] args)
{
int choice = aMenu();
System.out.println("You typed: "+choice);
choice = aMenu();
System.out.println("You typed: "+choice);
}
public static int aMenu()
{
int result = 0;
System.out.println("In aMenu... enter an int: ");
Scanner keyboard = new Scanner(System.in);
if (keyboard.hasNextInt())
result = keyboard.nextInt();
keyboard.close();
return result;
}
}
輸出是:
在AMENU ...進入一個int:您鍵入:2 在AMENU ...進入一個int: 您鍵入:0
感謝所有,現在它工作正常,但我還是不明白的邏輯完全。好的,我在aMenu()函數結束時關閉了輸入流,但是不是我在下一次調用時再次打開它,並且掃描儀鍵盤=新掃描儀(System.in)?我就是這麼做的,我已經閱讀過你推薦的鏈接,但我想我仍然錯過了一些東西。爲什麼不這樣工作,以後關閉並重新打開流?再次感謝您在這裏建立一個偉大的社區! – 2013-03-07 09:40:39
@xx:首先,當你調用'keyboard.close()'時,它也會關閉'System.in'。從那時起,無論您是否嘗試創建更多掃描儀,都無法從System.in中讀取任何內容。 – NPE 2013-03-07 09:42:37
謝謝,現在我明白了。所以,一旦一個流被關閉,它仍然是關閉的程序的其餘部分,你不能掃描不存在的東西.. – 2013-03-07 10:02:21