문제
package baekjoon;
import java.io.*;
public class Buffer {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String inputCnt = br.readLine();
int cnt = Integer.parseInt(inputCnt);
while(cnt!=0){
String inputNums = br.readLine();
String[] stringNums = inputNums.split(" ");
int sum = 0;
for(String i : stringNums){
sum += Integer.parseInt(i);
}
bw.write(sum);
bw.newLine();
cnt--;
}
bw.flush();
bw.close();
}
}
코드를 위와 같이 작성했을 때, 입력만 받고 출력없이 프로그램이 종료되는 문제가 발생했다.
원인

디버깅 했을 때, 출력할 변수인 sum에도 값이 잘 들어가 있는 걸 볼 수 있는데 출력이 되지 않은 걸 보니, bw.write(sum)
, bw.flush()
부분 때문인 것 같다.
어딘가에 실수가 있다기 보다는 내가 BufferedWriter를 이해하고 있지 않은 상태에서 작성한 코드라 조금 더 BufferedWriter에 대해 찾아보면 해결 가능할 것 같았다.
분석
찾아보니 BufferedWriter는 정수를 매개변수로 전달받지만 내부적으로는 값을 아스키코드로 변환해서 문자열로 다루는 함수였다.
따라서 전달한 값을 의도대로 출력하기 위해서는 valueOf로 문자열로 변환한 후에 출력하거나, 개행문자를 추가해주면 됐다.
아스키코드로 변환해서 출력하는 시스템인데, 왜 나는 아무것도 출력이 되지 않았을까해서 아스키코드를 살펴봤다.
피연산자를 1, 2, 3 같이 작은 숫자로만 지정하고 테스트를 했다보니 해당하는 아스키코드 값이 SOH, STX 등의 제어 문자였다.
아래와 같이 피연산자의 값을 크게 지정하고 실행하니 아스키코드 'A'가 출력되는 걸 볼 수 있었다.


해결

첨부된 이미지처럼 write 메서드 안에 문자열을 추가해주니 결과값이 제대로 출력되는 것을 볼 수 있었다.
'트러블 슈팅' 카테고리의 다른 글
[Java] 키오스크 프로그램에 스트림 적용 중 발생한 이슈 (0) | 2025.03.13 |
---|---|
[Java] 리스트에 담긴 데이터 중복 출력 이슈 (1) | 2025.03.12 |
[Java] 계산기 프로그램 추가 기능 구현 중 발생한 오류 해결 (0) | 2025.03.05 |
[Java] 계산기 프로그램의 출력값 오류 이슈 (0) | 2025.02.28 |
[Java] for-each문으로 배열 반복 시 이슈 (0) | 2025.02.24 |