본문 바로가기
카테고리 없음

TIL 230119

by hbIncoding 2023. 1. 19.

JAVA 공부 2일차

 

조건문, 반복문, 배열

 

 

1) 조건문/반복문

. 조건식의 다양한 예

. if 문

  • if ( 조건식) { 참일 때 실행 문} else {거짓일 때 실행 문}
  • if ( 조건식) { 참일 때 실행 문}else if (조건식2) {조건식2 참일때 실행 문} else {거짓일 때 실행 문}

. switich 구문

  • - 조건과 일치하는 경우 해당 구문 실행, break를 안쓰면 끝까지 검토 후 조건에 맞는 모든 문장 실행
  • case 구문에 대한 적용 예시
         case '1':             // OK. 문자 리터럴(정수 49와 동일)
         case ONE:         // OK. 정수 상수
         case "YES"        // OK. 문자열 리터럴
         case num:         // Error. 변수는 불가능 
         case 1.0:            // Error. 실수도 불가능
class Control2_1 {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
                    .
                    . (중략)
                    .

            case 0: case 13:
                     System.out.println("이런식으로 case 문을 사용할 수 있습니다.");
                     break;
            case 15:
            default: monthString = "Invalid month";
        }
        System.out.println(monthString);
    }
}

. for 문

  • for 문의 실행 순서 : 초기화 > 조건식 > 조건식에 대한 참 여부 확인 > 증감식 > 조건식 거짓 될때 까지 반복
  • 초기화 변수를 밖에서 가져와도 되고, for 문 안에서 선언해도 된다.
		int i = 0;
        for (i = 0; i < 5; i++) {
            System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
        }
        아래 위는 똑같다.
        for (int i = 0; i < 5; i++) {
            System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
        }

. Math.random()

  • Math.random() 은 0<= x < 1 범위의 실수를 랜덤으로 뽑아준다.
  • 따라서 1~5까지 랜덤으로 필요하다면 (int)를 이용해서 뒤를 잘라서 사용한다.
  • 주의사항) 괄호를 잘 포함하지 않으면 랜덤실수를 바로 인트화 시켜 0이 되어 버린다.
int i = (int)(Math.random() * 5 + 1 );

. while 과 do-while 

  • while은 조건을 확인 후 실행, do-while은 처음엔 무조건 실행 후 조건 확인하며 실행
  • 예시)
		int i = 0;
        while (sum <= 100) {
            System.out.println("i = " + i);
            System.out.println("sum = " + sum);
            sum += ++i;
        }
        
        
        do {
            System.out.println("i = " + i);
            System.out.println("sum = " + sum);
            sum += ++i;
        } while (sum <= 100);

. break 와 continue 

  • break : 자신이 포함된 하나의 반복문을 벗어난다. 하지만 이름을 붙여 원하는 반복문을 탈출 시킬 수 있다.
  • continue : 조건을 걸어주어 해당 반복문을 실행하지 않고 다음 반복문을 실행시킬 수 있다. 역시 이름을 붙여 원하는 반복문을 탈출시킬 수 있다.
		while (true) {
            if(sum > 100)
                break;
            ++i;
            sum += i;
        }
        
        allLoop :
        while (true) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    break allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
            i++;
        }
        
        allLoop : for (int i = 2; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    continue allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
        }

 

 

2) 배열

. 배열의 특징

  • 배열의 크기를 바꿀 수 없기에 새로운 배열을 찾아 기본값을 복사해서 저장해야 한다.

. 배열 초기화

  • 배열 초기화 예
int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; // new int[] 생략 가능
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9};

ㄷ. 스트링 배열

  • 주요 메서드
메서드 설명
char charAt(int index) 문자열에서 해당 위치(index)에 있는 문자를 반환한다.
int length() 문자열의 길이를 반환한다.
String substring(int from, int to) 문자열에서 해당 범위(from~to)의 문자열을 반환한다.(to는 포함 안됨)
boolean equals(Object obj) 문자열의 내용이 같은지 확인한다. 같으면 true, 다르면 false
char[] toCharArray() 문자열을 문자배열(char[])로 변환해서 반환한다

 

. 2차원 배열

  • 2차원 배열의 초기화
int[][] score = new int[][]{{}, {}, {}, {}};
int[][] score = {{}, {}, {}, {}};

. Arrays

  • 문자열 출력 : sout(arr)하면 arr의 저장 주소가 찍히기 때문에 아래와 같이 출력한다.
  • 배열 비교 시 1차원 비교는 equals, 다차원 비교에는 deppEquals를 사용한다.
/출력
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));

/비교
System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2)); 
System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2));
  • 배열 복사 : 배열과 끝구간 또는 배열과 구간 범위를 지정해 준다. copyOf 와 copyOfRange가 있다.
class Arrays6_2 {
    public static void main(String[] args) {
        int[] arr = {0,1,2,3,4};
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));

        System.out.println();
        // copyOf
        int[] arr2 = Arrays.copyOf(arr, arr.length);
        System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
        int[] arr3 = Arrays.copyOf(arr, 3);
        System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
        int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
        System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));

        System.out.println();
        // copyOfRange
        int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
        System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
        int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
        System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
    }
}
  • 정렬 : sort()를 사용한다.
class Arrays6_3 {
    public static void main(String[] args) {
       int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
        System.out.println();

        Arrays.sort(arr); // 오름차순으로 정렬됩니다.
        System.out.println("sort");
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
    }
}
  • 역정렬 :  타입 변환이 필요하다. Collections.reverseOrder()를 사용해야하는데 아래와 같이 배열 선언 시 Integer로 해야한다. int[] 등으로 받았다면 다른 타입으로 리스트 내 변수들을 받은 후 역정렬 하고 다시 넣어 줘야 할 것 같다.
import java.util.Arrays;
import java.util.Collections;

class Arrays6_3 {
    public static void main(String[] args) {
        Integer arr[] = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
        Arrays.sort(arr, Collections.reverseOrder());
        System.out.println(Arrays.toString(arr));
    }
}
  • 해당 변수가 그 값이 맞는지 알려주는 함수 ex)  String p="TIL"       >> p.equals("TIL") >>true/false