2014-06-10 2 views
0

최근 스캐너가 System.in 입력 스트림의 일부 입력을 완전히 무시하는 불편한 문제가 발생했습니다. 나는 yes를 입력합니다, 지금스캐너가 일부 입력을 무시합니다. (System.in)

Do you want a cookie? Yes or no. 

: 예를 들면 다음과 같습니다이다

yes 

결과 : 이제

Cookie for you! 

, 나는 아무 말을하지 않는 경우 :

no 
no 

결과 :

No Cookie for you. 

가져 오는 중? 내가 '예'라고 대답하면 그냥 받아들입니다. 내가 '아니오'라고 말하면 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

코드에 '쿠키'가 없습니다. –

+0

나는 xP를 깨닫는다. 그것은 내가 지금 사용하는 것과 같은 것입니다. – Code0

+0

그리고 도대체 왜 내 게시물을 downvote합니까 :( – 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"를 입력하면 "예"이므로 다음에 else if 코드가 실행되고 else if 조건은 다시 s.next()를 호출하여 입력을 요청합니다. 다시 "no"를 입력하면 "no" – rgettman

+0

사실 if (if 문에서) 코드가 실제로 실행되면 xD가 – Code0

관련 문제