2014-06-10 116 views
0

我最近出現了這個令人沮喪的問題,掃描儀完全忽略了System.in輸入流中的一些輸入。這裏有一個例子:掃描儀忽略一些輸入(System.in)

Do you want a cookie? Yes or no. 

現在,我輸入yes:

yes 

結果:

Cookie for you! 

現在,如果我說不:

no 
no 

結果:

No Cookie for you. 

Get it?如果我說是的,它只是接受它。如果我說不,我必須輸入2次。

如果你確實需要一些代碼。這裏有一些是:)

public static void main(String[] paramArgs){ 
    MainEW sMain = new MainEW(); 
    Scanner s = sMain.scanner; 

    System.out.println("Enter a file path."); 
    System.out.println("Example: /Users/Some_User/Desktop/Some_Folder"); 
    String defPath = s.next(); 

    System.out.println("Enter a name for the file."); 
    String defName = s.next() + ".txt"; 

    System.out.println("Now, enter what you want to write to the file."); 
    s.nextLine(); 
    String defText = s.nextLine(); 

    System.out.println("Do you want to create a new file? Yes or No"); 

    if (s.next().equalsIgnoreCase("yes")) { 
     WriterEW writer = new WriterEW(defPath, defName, defText, true); 
     return; 
    } else if (s.next().equalsIgnoreCase("no")) { 
     WriterEW writer = new WriterEW(defPath, defName, defText, false); 
     return; 
    } else { 
     System.out.println("Invalid input."); 
    } 
} 

謝謝:)

+1

在您的代碼中找不到'Cookie'! –

+0

我知道xP。這與我現在使用的東西是一樣的。 – Code0

+0

爲什麼地獄你只是爲了那個而低調我的帖子:( – Code0

回答

6

當你鍵入「否」,則else if塊再次呼籲next(),要求更多的投入。

而不是在每種情況下調用s.next(),而只需調用一次,然後再開始if條件。

String response = s.next(); 
if(response.equalsIgnoreCase("yes")){ 
    WriterEW writer = new WriterEW(defPath, defName, defText, true); 
    return; 
}else if(response.equalsIgnoreCase("no")){ 
+0

好吧,我得到你想告訴我的東西,但正如你可以在我的代碼中看到的那樣,我實際上並沒有要求輸入,直到我實際上調用我的if語句...應該不是這樣做的嗎 – Code0

+0

在你的代碼中,你的'if'條件通過調用's.next()'來請求輸入,你輸入「no」,它不等於「yes」,所以'else if'代碼接下來運行,然後'else if'條件再次通過調用's.next()'來請求輸入,然後再次輸入「no」,它等於「no」,所以'else if'塊運行 – rgettman

+0

我實際上認爲,如果代碼實際運行(在if語句中),如果它真的是真的xD – Code0