배열
- 정의 : [동일한 자료형]을 메모리상에 연속적으로 놓이게 한 것.
- 국어 점수 저장할 100명의 학생 변수
- int kor1, kor2, ~kor100;
- int [] kors = new int[100];
- 선언 및 생성
- 자료형 [] 배열명 = new 자료형[배열 크기];
- new 연산자 : 배열 크기만큼 heap 영역에 할당하고 시작주소 값을 스택 영역에 대입
- heap(동적 영역) : new 연산자에 의해서 배열 크기만큼 기억 공간을 가지고 있음
- stack(스택 영역) : 주소를 기억할 4바이트를 할당하고 배열명의 값으로 동적 영역에서의 주소 값을 저장
- 요소 : 각각의 heap 영역에 있는 기억 공간을 뜻함
- 윗첨자값(Upper Bound) : 배열 크기 -1
- 아랫첨자값(Lower Bound) : 0
- 모든 배열출력
- for 문 사용 배열명. length-1까지만 출력 -> 배열명.length까지 출력하면 오류 발생
- Arrays.toString(배열명)
- 6. 단점, 문제점
- 배열 크기를 처음 정하고 나면 배열 크기가 자동으로 증가 X
- 해결법 : 더 큰 길이의 임시배열을 새로 생성 -> 기존배열의 내용을 새 배열에 복사 -> 참조 주소 값도 변경
- 너무 작게 배열을 생성하면 몇 번을 더 반복해야 함
- 너무 크게 배열을 생성하면 메모리 낭비가 심함
- 기존배열의 2배 정도로 새 배열을 생성
- 배열 중간에 값을 추가(삽입)할 수 없다.
- insert 할 방이 존재하냐? 없으면 방 크기 증가
- insert 위치의 값부터 뒤에 있는 값들을 insert 할 개수만큼 뒤로 넘김
- 값을 추가
- 배열 크기를 처음 정하고 나면 배열 크기가 자동으로 증가 X
함수
- Call By Name -> test();
- Call By Value -> test(값);
- Call By Reference -> test(배열 or 클래스 or 인터페이스);
- 배열 자체를 가져오는 것이 아니라 참조할 배열의 참조주소 값을 가져오는 것임
클린코드
1.
| int centry = 0; switch (rrn.substring(7, 8)) { case "9": case "0": centry = 1800; break; case "1": case "2": case "5": case "6": centry = 1900; break; case "3": case "4": case "7": case "8": centry = 2000; break; } return centry; |
| int [] century = {1800,1900,1900,2000,2000,1900,1900,2000,1800}; return century[rrn.charAt(7)-48]; |
2.
| int first = 1; int second = 2; int thired = 0; int sum = first + second; System.out.printf("%d+%d+",first, second); for(int i = 2; second + i <= 100; i++) { thired = second + i; sum += thired; second = thired; System.out.printf(second + i <= 100 ?"%d+" : "%d",thired); } System.out.printf("=%d",sum); |
| int sum = 0; int termValue = 1; int increaseValue = 0; while((termValue += increaseValue++) <= 100) { System.out.printf("%d+",termValue); sum += termValue; } System.out.printf("=%d",sum); |
3.
| for (int i = 1, k = 1; i <= 7 && k <= lastDay; i++) { for (int j = ( i == 1 ? dayOfWeek : 0); j <= 6 && k <= lastDay; j++, k++) System.out.printf("%d\t",k); System.out.println(); } |
| for (int i = 1; i <= lastDay; i++) { System.out.printf("%d\t",i); if ( (i+dayOfWeek) % 7 == 0) System.out.println(); } |
4.
| while(n > 0) { bn = n%2 + bn; n /= 2; } int pulsZero = 16 - bn.length(); for(int i = 0; i < pulsZero;i++) bn = 0 + bn; |
| while(share != 0) { share = n / 2; rest = n % 2; binary[idx--] = rest; n = share; } |
5.
| int [] devidedMoney = new int[10]; int [] typeOfMoney = {50000,10000,5000,1000,500,100,50,10,5,1}; devidedMoney[0]=money; for(int i = 0; i < devidedMoney.length-1; i++) { money = devidedMoney[i]; devidedMoney[i] = money / typeOfMoney[i]; devidedMoney[i+1] = money % typeOfMoney[i]; System.out.printf("%d원\t: %d개\n",typeOfMoney[i],devidedMoney[i]); } |
| int unit = 50000; int count = 0; // 수량저장 boolean sw = false; while(unit >= 1) { count = money / unit; System.out.printf("%d원\t: %d개\n",unit, count); money %= unit; unit /= (sw ? 2 : 5); sw = !sw; } |