moho009804   2년 전

scanner쓰다가 BufferedReader 연습하고 있습니다 어렵네요 ㅠㅠ

이렇게 작성하면 입력은 되는데 출력이 안되네요 어디가 문제일까요 ?

djm03178   2년 전

Scanner로는 작성해 보셨나요? 입력을 계속해서 받아야 하는데, 입력을 한 번만 받고 있으니 첫째 줄 이외에는 아예 입력을 받지 않고 루프만 도는 상태가 됩니다.

moho009804   2년 전

음.. while 조건에 맞추면 바로 while문 실행되어야 하는거 아닌가요 ?

scanner로 작성하면 1 1 입력시 바로 2가 나오는데

BufferedReader로 작성하면 0 0을 입력해야 전에 작성했던 값들의 합이 주르륵 나오네요 ㅠㅠ?

혹시 제가 코드를 잘못 작성한건가요 

--------------------------------------------------------------------------------------------

Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
while(a!=0||b!=0) {
System.out.println(a+b);
a = scanner.nextInt();
b = scanner.nextInt();
}
}

--------------------------------------------------------------------------------------------

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st ;
st =new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
while(a!=0&&b!=0) {
bw.write(a+b+"\n");
st =new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
}
br.close();
bw.flush();
bw.close();
}
}

djm03178   2년 전

그게 바로 BufferedWriter의 역할입니다.

출력할 내용을 곧바로 화면에 보내는 것이 아니라, 속도를 빠르게 하기 위해 내부적으로 버퍼를 따로 만들어놓고 여기에 출력할 내용을 쌓아뒀다가, 추후에 flush()를 했을 때에 비로소 화면에 보내는 역할입니다.

채점 시에는 최종적으로 출력한 총 내용만이 중요하므로 바로바로 출력이 나오지 않아도 됩니다.

moho009804   2년 전

아하..! flush()에 대한 질문이 있습니다. 아까랑 똑같은 코드에서 bw.flush()를 지우고 실행을 했는데 결과가 똑같이 나왔습니다.

public class algoritm_practice {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st ;
st =new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
while(a!=0&&b!=0) {
bw.write(a+b+"\n");
st =new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
}
br.close();

bw.close();
}
}

flush()를 지웠는데도 출력값이 어떻게 화면에 나온건가요 ?

djm03178   2년 전

close를 하면 자동으로 flush가 호출됩니다.

댓글을 작성하려면 로그인해야 합니다.