switch - case문은 break로 조건문이 빠져나오지 못하면 참인 조건에서 빠져나오지 못하고, 아래 조건문까지 실행된다. 따라서 break를 잘 사용해야 한다!
int a = 100;
switch(a/10){
case 10 :
case 9 : System.out.print("A");
case 8 : System.out.print("B");
default : System.out.print("F");
}
// 출력 : ABF
출력의 기본 마인드
항상 행 먼저 : 좌 -> 우
그 다음 열 : 상 -> 하
하나의 이름으로 방을 나눠서(index) 여러개의 값을 저장 할 수 있다.
배열 생성 방법
// 정수형 5개 저장하는 배열
//1. 자료형 이름 [] = new 자료형 [길이];
int arr [] = new int [5];
//2. 자료형 [] 이름 = new 자료형 [길이];
int [] arr = new int [5];
//3. 자료형 [] 이름 = new 자료형 []{값,값 ~};
int [] arr = new int []{1,2,3,4,5};
//4. 자료형 [] 이름 = {값};
int [] arr = {1,2,3,4,5};
배열 조회 방법
// 길이는 먼저 계산
int len = arr.length;
for(int i=0; i < len; i++){
System.out.println(arr[i]);
}
개선된 for문으로 조회
// for (타입 변수명 : 반복 대상 배열){
//}
for(int i : arr){
System.out.println(i);
}
데이터의 0에 준하는 초기값
2차원 배열 생성 방법
// 3행 5열 저장하는 배열
//1. 자료형 이름 [][] = new 자료형 [행][열];
int arr [][] = new int [3][5];
//2. 자료형 [][] 이름 = new 자료형 [행][열];
int [][] arr = new int [3][5];
//3. 자료형 [][] 이름 = new 자료형 [][]{값,값 ~};
int [][] arr = new int [3][5]{1,2,3,4,5};
//4. 자료형 [][] 이름 = {값};
int [][] arr = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
2차원 배열의 길이
모니터 출력 = 화면 출력 => System.out ----> java.io.OutputStream
키보드 입력 = 입력 => System.in ----> java.io.InputStream
Scanner(File source)
Scanner(InputStream source)
Scanner(String source)
Scanner(File source)
※ 오버로딩 : 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다. Scanner의 경우 생성자 오버로딩
int no = xx.nextInt(); //개행문자("\n") 무시
String data = xx.next(); //공백없이 문자열 : 개행문자("\n") 무시
String data = xx.nextLine(); //공백이 있는 문자열 경우 : 개행문자("\n") 읽어들임
※문자열은 캐스팅이 불가하다! (문자열은 객체이기 때문)
문자열 형 변환
문자열 -> 숫자 변환
Integer.parseInt(String s)
숫자 -> 문자열 변환
Integer.toString(int i)
sc.nextLine()으로 모두 받아오고 나서 형변환을 해주는 것이 깔끔하다
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수는 : ");
int kor = Integer.parseInt(sc.nextLine()); // \n까지 읽으니 buffer에 남은게 없다
System.out.print("영어 점수는 : ");
int eng = Integer.parseInt(sc.nextLine());
System.out.print("이름은 : ");
String name = sc.nextLine();
//1
InputStream is = System.in;
System.out.print("입력 = ");
//2
InputStreamReader isr = new InputStreamReader(is);
//3
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();
System.out.println(data);
현재 시간과 UTC(협정세계시)인 1970년 1월 1일 자정과의 차이로 밀리세컨드(1/1000초) 값을 반환
작동중인 JVM의 정밀한 시간 소스의 현재 값을 long타입으로 나노세컨드(1/1_000_000_000초)를 반환
시스템의 시간을 사용하기 위해서나 오늘 날짜를 알아내기 위해서는
System.currentTimeMillis()를 사용
개발한 프로그램의 성능 측정을 위해 나노초로 정밀하게 구간 시간 측정을 위해서는
System.nanoTime()를 사용
많은 양의 데이터가 들어는 경우 Bufferd를 활용한 IO방식이 Scanner 방식보다 빠른 성능을 보여준다.
public class ScannerVsIOExam {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ScannerVsIOExam se = new ScannerVsIOExam();
System.out.println("1. Scanner -------------------");
se.test(); //0.033
System.out.println("2. IO -------------------");
se.test2(); // 0.012
}
// Scanner로 읽기
public void test()throws Exception {
System.setIn(new FileInputStream("src/day02/input.txt"));
Scanner sc = new Scanner(System.in);
long start = System.nanoTime();
while(sc.hasNext()) {
String data = sc.nextLine();
System.out.println(data);
}
long end = System.nanoTime();
System.out.print((end-start)/1_000_000_000.0+"s");
}
// IO로 읽기
public void test2() throws Exception{
BufferedReader br = new BufferedReader(new FileReader("src/day02/input.txt"));
String data;
long start = System.nanoTime();
while((data = br.readLine()) != null) {
System.out.println(data);
}
long end = System.nanoTime();
System.out.print((end-start)/1_000_000_000.0+"s");
}
}