2012-05-08 6 views
1

저는 Java로 작업하기 시작했습니다. 콘솔 입력이 제대로 작동하도록 노력했습니다.콘솔 입력이 없어야 할 때까지 기다림

System.out.println("Write a word: "); 
Scanner keyboard = new Scanner(System.in); 
System.out.println("DEBUG 1"); 
str = keyboard.nextLine(); 
System.out.println("DEBUG 2"); 
System.out.println(str); 

이 한 번만 입력을해야하고 인쇄 입력이 같은 : 여기에 코드입니다

Write a word: 
DEBUG 1 
Hello   //My input 
DEBUG 2 
Hello   //Output 

그러나 이런 것입니다 : 그래서

Write a word: 
Hello   //My input 
DEBUG 1 
       //Waiting for new input 
DEBUG 2 
Hello   //The first input 

것 같습니다 그게 어떻게 든 입력 줄에 걸릴거야 스캐너 키보드 = 새로운 스캐너 (System.in); 그리고 내 변수 str에 입력하십시오.

javac hello_world.java 
java hello_world 

편집 : 나는 컴파일하고 실행하려면 다음 명령을 사용하여 컴파일 할 GCJ를 사용하여 내가 32 비트로 대신 우분투 10.04의 64 비트 우분투 10.04를 사용하여, 지금은 다른 컴퓨터에 프로그램을 실행하려고했습니다 전에. 같은 방식으로 실행하고 다시 컴파일하지 않았으므로 프로그램이 올바르게 작동합니다.

왜 이런 식으로 행동하나요?

+0

디버거를 사용해 보셨습니까? – home

답변

1

DEBUG 1이 예상보다 나중에 출력되도록하는 플러시/버퍼링 문제가있을 수 있습니다. 예를 들어, println("DEBUG 1")keyboard.nextLine() 전에 실행될 수 있습니다. 그러나 어떤 이유로 입력이 읽히기 전까지는 출력이 중단되고 출력되지 않습니다.

하지만 실제로는 두 개의 줄 바꿈을 입력해야합니다. 하나는 Hello 뒤에, 다른 하나는 "새 입력 대기 중"줄에 입력해야합니다. 그렇다면 설명하기가 더 어렵습니다. 아마도 라인 종단의 비 호환성 문제 일 것입니다.

표준 JDK를 사용하여 컴파일하고 실행하면 예상대로 동작합니다.

0

Oracle JDK 6을 사용하여 Windows에서 실행되는 Eclipse에서 프로그램을 점검했는데 예상 한 결과가 나타납니다.

public static void main(String[] args) { 
     System.out.println("Write a word: "); 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("DEBUG 1"); 
     String str = keyboard.nextLine(); 
     System.out.println("DEBUG 2"); 
     System.out.println(str); 
    } 

결과 :

Write a word: 
DEBUG 1 
hello 
DEBUG 2 
hello 

오픈 JDK는 오라클 JDK와 비슷한 정도이며 자신의 패키지 관리자에서 많은 배포판 사용할 수 있습니다. gcj 대신 openJDK를 사용하여 확인할 수 있습니까?

+0

Win7에서 Netbeans으로 프로그램을 실행해도 정확한 결과를 얻을 수 있습니다. – ChadNC