2014-10-03 2 views
8

간단한 이야기를 만들고 있는데, 때때로 사용자가 Enter 키를 누르라는 메시지가 나타납니다. 그것은 내가 프롬프트 할 때 처음 작동하지만 다른 프롬프트가 즉시 실행됩니다. ENTER 키를 놓을 때까지 프로그램이 너무 빨리 실행되기 때문에 이미 프롬프트에 대한 검사가 실행되었습니다.자바 콘솔 이동하기 전에 ENTER 입력 프롬프트

아이디어가 있으십니까? 아래 코드.

System.out.println("...*You wake up*..."); 
    System.out.println("You are in class... you must have fallen asleep."); 
    System.out.println("But where is everybody?\n"); 
    promptEnterKey(); 

    System.out.println("You look around and see writing on the chalkboard that says CBT 162"); 
    promptEnterKey(); 

////////////////////////////////////////////////////// 

public void promptEnterKey(){ 
    System.out.println("Press \"ENTER\" to continue..."); 
    try { 
     System.in.read(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+2

스캐너 클래스를 사용해야한다고 생각합니다. – Emrage

+1

[이 SO 게시물] (http://stackoverflow.com/questions/7877529/java-string-scanner-input-does-not-wait-for) -info-moves-direct-to-next-stateme) ... 같은 것을 다시 배치하기 전에 다른 질문을 읽어보십시오. – starvator

+1

앞으로는 System.out.print (System.in.read()); 무슨 일이 일어나고 있는지 보러. [이 Ascii 테이블] (http://www.asciitable.com/)은 캐리지 리턴과 개행 문자가 안으로 읽혀지고 있다고 지적합니다. – Compass

답변

11

System.in.read가 두 번 차단되지 않은 이유는 사용자 프레스를 처음 입력 할 때, 두 바이트 \r\n 대응 저장되는 점이다.

가 대신 Scanner 예를 사용 : 우리가 System.in를 사용하는 접근 방식을 유지하는 경우

public void promptEnterKey(){ 
    System.out.println("Press \"ENTER\" to continue..."); 
    Scanner scanner = new Scanner(System.in); 
    scanner.nextLine(); 
} 
+0

실제로 입력을 사용하지 않기 때문에 스캐너를 사용하지 마십시오. 아래 내 해결책 좀 봐 ... 그것은 당신이 입력이 필요하지 않는 것이 좋습니다. – brso05

+0

입력을 사용할 필요가 없습니다. 최악의 시나리오에서는 라인에 쓰레기를 입력 할 수 있으며 일단 예상/r/n 입력이 수행되면 프로그램에 영향을 미치지 않습니다. – Compass

+1

@ brso05 - 둘 다 유효한 해결책입니다. – Krease

2

를, 바이트를 정의하는 옳은 것은 당신이 당신의 prompEnterKey을 읽고 변경할 것입니다 :

public static void promptEnterKey(){ 
     System.out.println("Press \"ENTER\" to continue..."); 
     try { 
      int read = System.in.read(new byte[2]); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

필요에 따라 작동합니다. 하지만 다른 사람들이 말했듯이 Scanner 클래스와 같은 다른 접근 방식을 시도해 볼 수 있습니다. 그 선택은 귀하에게 달려 있습니다.

+3

System.in을 사용한다면'/ r/n'이 스택에서 읽히지 않으면 계속해서는 안됩니다. 그렇지 않으면 무작위 키를 누르면 코드가 계속 진행되면 안됩니다. – Compass

+3

그래, 당신은 요점이있어, 더 안전한 상황을 위해, 그는이 가능한 항목을 vadidate해야합니다. –

관련 문제