프로그래밍/자바공부 - 수업일차별

수업 11일차

leecoder 2021. 9. 2. 21:30

배열

  1. 정의 : [동일한 자료형]을 메모리상에 연속적으로 놓이게 한 것.
  2. 국어 점수 저장할 100명의 학생 변수
    • int kor1, kor2, ~kor100;
    • int [] kors = new int[100];
  3. 선언 및 생성
    • 자료형 [] 배열명 = new 자료형[배열 크기];
    • new 연산자 : 배열 크기만큼 heap 영역에 할당하고 시작주소 값을 스택 영역에 대입
    • heap(동적 영역) : new 연산자에 의해서 배열 크기만큼 기억 공간을 가지고 있음
    • stack(스택 영역) : 주소를 기억할 4바이트를 할당하고 배열명의 값으로 동적 영역에서의 주소 값을 저장
  4. 요소 : 각각의 heap 영역에 있는 기억 공간을 뜻함
    • 윗첨자값(Upper Bound) : 배열 크기 -1
    • 아랫첨자값(Lower Bound) : 0
  5. 모든 배열출력
    • for 문 사용 배열명. length-1까지만 출력 -> 배열명.length까지 출력하면 오류 발생
    • Arrays.toString(배열명)
  6. 6. 단점, 문제점
    • 배열 크기를 처음 정하고 나면 배열 크기가 자동으로 증가 X
      • 해결법 : 더 큰 길이의 임시배열을 새로 생성 -> 기존배열의 내용을 새 배열에 복사 -> 참조 주소 값도 변경
      • 너무 작게 배열을 생성하면 몇 번을 더 반복해야 함
      • 너무 크게 배열을 생성하면 메모리 낭비가 심함
      • 기존배열의 2배 정도로 새 배열을 생성
    • 배열 중간에 값을 추가(삽입)할 수 없다.
      • insert 할 방이 존재하냐? 없으면 방 크기 증가
      • insert 위치의 값부터 뒤에 있는 값들을 insert 할 개수만큼 뒤로 넘김
      • 값을 추가

함수

  1. Call By Name -> test();
  2. Call By Value -> test(값);
  3. Call By Reference -> test(배열 or 클래스 or 인터페이스);
  4. 배열 자체를 가져오는 것이 아니라 참조할 배열의 참조주소 값을 가져오는 것임

클린코드

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;
}

 

'프로그래밍 > 자바공부 - 수업일차별' 카테고리의 다른 글

수업 13일차  (0) 2021.09.11
수업 12일차  (0) 2021.09.11
수업 10일  (0) 2021.09.01
수업 9일차  (0) 2021.09.01
수업 8일차  (0) 2021.08.31