2017-03-28 6 views
3

코드를 테스트 할 때 문제가 있습니다. 문제는 InputStreamReader에서 읽는 BufferedReader를 사용하는 것과 관련이 있다고 생각합니다. 내가 IntelliJ를 사용하고 다음과 같은 입력 제공 : 왜 내 프로그램은 아무것도 인쇄되지입력 스트림에서 읽은 버퍼링 된 리더 테스트

Hello 
World! 

를? 여기 내 코드는 다음과 같습니다.

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    Deque<String> lines = new ArrayDeque<>(); 
    String line = br.readLine(); 

    while (line != null) { 
     lines.push(line); 
     line = br.readLine(); 
    } 

    while (!lines.isEmpty()) { 
     System.out.println(lines.pop()); 
    } 
} 

답변

0

코드는 입력을 완료 한 시점을 알아야합니다. 우분투에 내가 입력했다 : 나는 EOS을 알리기 위해 STRG + D 충돌보다

Hello 
World 

.

Hello 
World 
1

다음과 같은 조건이 결코 거짓으로 평가하지 않기 때문에 당신은 무한 루프에 갇혀 있어요 :

while (line != null) { 
    lines.push(line); 
    line = br.readLine(); 
} 
3

귀하의 코드는 첫 번째 루프에서 악취 이후 나는 출력을 얻었다.

은 다음으로 루프 조건을 수정,이 문제를 해결하려면, 당신은 그냥를 입력 을 쳤을 때
while (line != null && !line.isEmpty()) { 
    lines.push(line); 
    line = br.readLine(); 
} 

는 그런 다음 루프는 종료됩니다.

또는 다른 exit code을 추가 할 수 있습니다. 예 : while (line != null && !line.equals("exit")). 따라서 콘솔에 입력하면 exit code (위의 예에서 exit) 루프가 멈추고 원하는 출력을 얻게됩니다.

관련 문제