문제
N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.
출력
출력형식과 같게 N*1부터 N*9까지 출력한다.
예제 입력 1
2
예제 출력 1
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
이전에 배운 BufferedReader
와 StringTokenizer
를 이용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
for (int i = 1; i <= 9; i++) {
System.out.println(a + " * " + i + " = " + a * i);
}
}
}ㄷ둡
import java.io.*;
import java.util.StringTokenizer;
public class Main {
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 = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
for (int i = 1; i <= 9; i++) {
//메서드를 통해 출력할 데이터를 버퍼에 쓴다. 구구단 결과를 문자열로 만들어 출력
bw.write(a + " * " + i + " = " + (a * i));
//구구단 결과를 한 줄씩 출력
bw.newLine();
}
//버퍼에 남아있는 데이터를 출력 스트림으로 밀어내어 실제로 출력
bw.flush();
}
}
미묘하지만 메모리가 줄어든 것을 확인 16152 KB → 16140 KB
BufferedReader
, BufferedWriter
, StringTokenizer
를 다시 한번 정리해보자
Scanner
와 유사하다.
System.out.println();
과 유사
둘은 모두 기존에 쓰던 scanner와 System.out.println()보다 속도 측면에서 훨씬 빠르기 때문에
(입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높임)
많은 양의 데이터를 처리할 때 유리하다.
이 둘을 사용하려면 다음의 import가 추가적으로 필요하다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
실제 코딩테스트 환경에선 import java.io.*
을 쓰면 되겠지?
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = bf.readLine(); //String
int i = Integer.parseInt(bf.readLine()); //Int
readLine()
시 리턴값을 String
으로 고정되기에 String이 아닌 다른 타입으로 입력을 받을려면 형변환
을 꼭 해주어야한다는 점예외처리
를 꼭 해주어야한다는 점! 대개 throws IOException
을 통하여 작업한다. → import java.io.IOException;
→ public static void main(String[] args) throws IOException {}
StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt**(st.nextToken());** //첫번째 호출
int b = Integer.parseInt**(st.nextToken());** //두번째 호출
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
Read한 데이터는 Line단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해주어야 한다.
StringTokenizer
에 nextToken()함수
를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출 가능하다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //할당된 버퍼에 값 넣어주기
String s = "abcdefg"; //출력할 문자열
bw.write(s+"\n"); //버퍼에 있는 값 전부 출력
bw.flush(); //남아있는 데이터를 모두 출력시킴
bw.close(); //스트림을 닫음
BufferedWriter
의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close()
를 반드시 호출해 주어 뒤처리를 해주어야 한다.
bw.write
에는 System.out.println();과 같이 자동개행기능이 없기
때문에 2가지 방법으로 처리 가능하다.
개행을 해주어야할 경우에는 \n
를 통해 따로 처리bw.newLine()
****를 사용해 한 줄씩 출력[JAVA] BufferedReader 와 Bufferedwriter 사용법
[JAVA] String, StringBuilder, StringBuffer, BufferedWriter 차이