본문 바로가기
TIL/JAVA

23.04.11

by J1-H00N 2023. 4. 11.

flowchart - 알고리즘이나 프로그램의 논리 혹은 흐름을 그림으로 표현하는 방법

직선형, 분기형, 반복형이 있다.

 

조건문 형태

if (조건식) {
조건식의 결과가 일 때 실행하고자 하는 문장;
}
 
if (조건식) {
조건식의 결과가 일 때 실행하고자 하는 문장;
} else {
조건식의 결과가 거짓일 때 실행하고자 하는 문장;
}
 if (조건식1) {
조건식1의 결과가 일 때 실행하고자 하는 문장;
} else if (조건식2) {
조건식2의 결과가 일 때 실행하고자 하는 문장;
} else {
조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 문장;
즉, 위의 어느 조건식에도 만족하지 않을 때 수행
}
 
if (조건식1) {
조건식1의 결과가 일 때 실행하고자 하는 문장;
if (조건식2) {
조건식1  조건식 2의 결과가 모두 일 때 실행하고자 하는 문장;
} else {
조건식1의 결과가 이고, 조건식2의 결과가 거짓일 때 실행하고자 하는 문장;
}
} else {
조건식1의 결과가 거짓일 때 실행하고자 하는 문장;
}

이 때 여러 문장을 묶어주는 {}를 블럭이라 하는데, if 조건문에서 실행할 문장이 하나라면 블럭 생략 가능

char ch = 'b';
        if (ch >= 'a' && ch <= 'z')
            System.out.println("해당 문자는 영문 소문자입니다.");
 
 
switch (조건식) {
case 값1:
조건식의 결과가 값1과 같을 경우 수행할 문장;
break;
case 값2:
조건식의 결과가 값2와 같을 경우 수행할 문장;
break;
....
 
default:
조건식의 결과와 일치하는 case 문이 없을 때 수행할 문장;
}
 
switch 조건문은 처리해야 하는 경우의 수가 많을 때 사용하기 좋으며, break가 없으면 끝까지 실행되기에 필요하고, default문은 생략해도 된다.
 
if문과의 차이점은 if문은 조건식 결과가 true/false만 가능하고 switch문은 정수(실수X)나 문자열(중복X)만 가능하다.

 

임의의 정수 만들기

Math.random() -> 0.0 과 1.0 사이의 임의의 double 값을 반환

 

1~10의 정수 만들기

System.out.println((int)(Math.random() * 11) - 5); // -5 ~ 5

 

반복문

for (초기화; 조건식; 증감식) {
조건식의 결과가 인 동안 반복적으로 실행하고자 하는 문장;
}
 
class Control3_3 {
    public static void main(String[] args) {
        // 초기화 시 변수 2개 사용 가능합니다. 단, 타입이 같아야 한다.
        for (int i = 1, j = 10; i <= 10; i++, j--) {
            System.out.println("i는 현재 " + (i) + "입니다.");
            System.out.println("j는 현재 " + (j) + "입니다.");
        }
        System.out.println();
        // 이렇게 변수 2개를 사용하여 조건식을 구성할 수 있습니다.
        for (int k = 1, t = 10; k <= 10 && t > 2; k++, t--) {
            System.out.println("k는 현재 " + (k) + "입니다.");
            System.out.println("t는 현재 " + (t) + "입니다.");
        }
    }
}
 
for (초기화; 조건식1; 증감식) {
조건식1의 결과 인 동안 반복적으로 실행하고자 하는 문장;
for (초기화; 조건식2; 증감식) {
조건식2의 결과 인 동안 반복적으로 실행하고자 하는 문장;
}
}
 
for (타입 변수이름 : 배열 or 컬렉션) {
배열 or 컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;
}
 
실행 순서 : 초기화 -> 조건식 -> 조건식이 참일 경우 실행 -> 증감식 -> 조건식이 거짓이 될 때까지 반복

 

while (조건식) {
조건식의 결과가 인 동안 반복적으로 실행하고자 하는 문장;
}
		int sum = 0;
        int i = 0;

        while (sum <= 100) {
            System.out.println("i = " + i); 
            System.out.println("sum = " + sum);
            sum += ++i; // i는 1씩 커지고 sum은 0부터 시작해 1,2,3 순서대로 더해 피보나치 수열이 된다.
        }
 
실행 순서 : 조건식 -> 조건식이 참일 경우 실행 -> 조건식이 거짓이 될 때까지 반복
 
 
do {
조건식의 결과가 인 동안 반복적으로 실행하고자 하는 문장;
} while (조건식);
 
실행 순서 : 처음 한 번은 무조건 실행 -> 조건식 -> 조건식이 참일 경우 실행 -> 조건식이 거짓이 될 때까지 반복

 

break는 switch 문에서 언급했던 것처럼 자신이 포함된 반복문을 벗어나는 역할을 한다

class Control6_1 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 0;

        while (true) {
            if(sum > 100)
                break; // 100보다 클 '때' 멈추기 때문에
            ++i;
            sum += i;
        }

        System.out.println("i = " + i);
        System.out.println("sum = " + sum); // sum = 105가 나온다.
    }
}

 

continue는 자신이 포함된 반복문의 끝으로 이동하고 다음 반복으로 넘어가는 역할을 한다

전체 반복 중에서 특정 조건에서 반복을 건너뛸 때 유용

class Control6_2 {
    public static void main(String[] args) {
        for (int i = 0; i <= 10; i++) {
            // 3의 배수는 건너뜀 : 3, 6, 9
            if (i % 3 == 0)
                continue;
            System.out.println("i = " + i); // continue로 인해 i = 1, i = 2, i = 4, ...와 같은 결과가 나옴
        }
    }
}

 

반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다

class Control6_3 {
    public static void main(String[] args) {
        allLoop :
        for (int i = 2; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    break allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
        }
    }
}

 

allLoop 부분을 삭제하면 break는 j가 포함된 반복문만 벗어나기 때문에 i 반복문을 다시 실행해 9*9=81까지 출력되고, 그대로 두면 모든 반복문을 벗어나 4*9=36까지만 출력된다.

 

 

배열 - 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

타입 변수이름[]; or 타입[] 변수이름; 으로 배열 선언 ex) int age[]; , String[] name;

타입[] 변수이름 = new 타입[길이]; 으로 배열 생성

class Arrays1_1 {
    public static void main(String[] args) {
//        int[] age; // 참조변수 베열 age 생성
//        age = new int[5]; // 배열의 생성
        int[] age = new int[5]; // 선언과 생성 동시에
        age[3] = 28;
        System.out.println("age[3] = " + age[3]);

        int beatitudoAge = age[3];
        System.out.println("beatitudoAge = " + beatitudoAge);

        System.out.println("age 배열의 전체값 확인");
        System.out.println("age[0] = " + age[0]); // 기본값 0
        System.out.println("age[1] = " + age[1]); // 기본값 0
        System.out.println("age[2] = " + age[2]); // 기본값 0
        System.out.println("age[3] = " + age[3]); // 지정값 28
        System.out.println("age[4] = " + age[4]); // 기본값 0
    }
}

 

배열 길이 구하기 - 배열이름.length

배열의 한계점 - 실행 중 길이 변경 X

 

초기화 - 배열의 각 요소에 처음으로 값을 저장하는 것

저장하기 전 자동적으로 저장돼있는 값은 아래 표를 따른다

byte
0
short
0
int
0
long
0L
float
0.0f
double
0.0d
char
'\n0000'
boolean
false
참조형 변수(String or any Object)
null

 

초기화 방법 - int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; or int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9}; (new int[] 생략가능)

배열 출력

import java.util.Arrays;

class Arrays3_1 {
    public static void main(String[] args) {
        int[] arr = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
        //  배열을 가리키는 참조 변수 arr 을 출력
        System.out.println("arr = " + arr); 
        // 메모리 주소와 비슷한 문자열이 출력 -> 실제 주소는 아닙니다.
        // [I@7a81197d -> [(배열을 뜻함), I(int 타입을 뜻함), @(위치를 뜻함)

        // 예외 확인 하기 - char[]
        char[] chArr = {'a', 'b', 'c', 'd'};
        System.out.println(chArr); // abcd 가 출력되는데 이는 println 메서드의 기능 때문!

        // 배열의 요소 하나씩 출력하기
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "] = " + arr[i]);
        }
        
        // Arrays.toString(배열) : 배열의 모든 요소를 문자열로 만들어서 반환한다.
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
    }
}

 

총합, 평균, 최대최소, 랜덤 배열

class Arrays3_2 {
    public static void main(String[] args) {
        int sum = 0; // 총합을 저장
        float avg = 0f; // 평균을 저장

        int[] score = {100, 40, 33, 50, 77, 29};

        for (int i = 0; i < score.length; i++) {
            System.out.println("score[" + i + "] = " + score[i]);
            sum += score[i];
        }

        avg = sum / (float) (score.length); // 계산결과를 float 타입으로 얻기 위해 형변환

        System.out.println("총합 = " + sum);
        System.out.println("평균 = " + avg);
    }
}

class Arrays3_3 {
    public static void main(String[] args) {
        int[] score = {65, 97, 88, 43, 33, 91, 28};

        int max = score[0]; // 최대값을 배열의 첫 번째 값으로 초기화 한다.
        int min = score[0]; // 최소값을 배열의 첫 번째 값으로 초기화 한다.

        for (int i = 0; i < score.length; i++) {
            if (score[i] > max) {
                max = score[i];
            } else if(score[i] < min) {
                min = score[i];
            }
        }

        System.out.println("최대값 = " + max);
        System.out.println("최소값 = " + min);
    }
}

class Arrays3_4 {
    public static void main(String[] args) {
        int[] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println("원본 = " + Arrays.toString(numArr));

        for (int i = 0; i < numArr.length; i++) {
            int num = (int) (Math.random() * 10); // 0 ~ 9 의 랜덤 수

            int tmp = numArr[0]; // 배열의 첫 번째 수로 계속 초기화 된다.

            // 랜덤한 위치의 값과 배열의 첫 번째 수가 서로 바뀐다.
            numArr[0] = numArr[num];
            numArr[num] = tmp;

            System.out.println(i + 1 + " 번째 변경 : " + Arrays.toString(numArr));
        }

        System.out.println("결과 = " + Arrays.toString(numArr));
    }
}

 

String - char[]와 메서드(기능)을 합친 것

문자열을 많이 써서 새로 만들어진 class이다

 

String 클래스의 주요 메서드

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[])로 변환해서 반환한다
class Arrays4_1 {
    public static void main(String[] args) {
        String str = "ABCDEFG";
        char ch = str.charAt(3);
        System.out.println("ch = " + ch); // ch = D

        String str2 = str.substring(1, 4);
        System.out.println("str2 = " + str2); // str2 = BCD

        String str3 = str.substring(1);
        System.out.println("str3 = " + str3); // str3 = BCDEFG

        String str4 = str.substring(1, str.length());
        System.out.println("str4 = " + str4); // str4 = BCDEFG

        char[] chArr = str.toCharArray();
        System.out.println("Arrays.toString(chArr) = " + Arrays.toString(chArr)); // Arrays.toString(chArr) = [A, B, C, D, E, F, G]
    }
}

 

String 배열의 선언과 생성 - String[] name = new String[3]; (3개의 문자열을 담을 수 있는 배열, 기본값은 null)

class Arrays4_2 {
    public static void main(String[] args) {
        String[] strArr = {"축구", "야구", "골프", "테니스"};
        System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr)); // Arrays.toString(strArr) = [축구, 야구, 골프, 테니스]

        String[] strArr2 = new String[4];
        System.out.println("Arrays.toString(strArr2) = " + Arrays.toString(strArr2)); // Arrays.toString(strArr2) = [null, null, null, null]
    }
}

 

2차원 배열(테이블 형태의 데이터를 저장하기 위한 배열)의 선언과 생성 - int[][] score = new int[행의 수][열의 수];

 

초기화 - int[][] score = new int[][]{{}, {}, {}, {}}; or int[][] score = {{}, {}, {}, {}};

class Arrays5_1 {
    public static void main(String[] args) {
        int[][] score = {
                {88, 35, 100},
                {84, 60, 55},
                {100, 99, 72}, 
                {33, 54, 77}
        };
        
        //길이 확인하기
        System.out.println("score.length = " + score.length);
        System.out.println("score[0].length = " + score[0].length);
        
        System.out.println();
        // 출력 예 1 : Arrays.toString()
        System.out.println("Arrays.toString()");
        System.out.println("Arrays.toString(score[0]) = " + Arrays.toString(score[0]));
        System.out.println("Arrays.toString(score[1]) = " + Arrays.toString(score[1]));
        System.out.println("Arrays.toString(score[2]) = " + Arrays.toString(score[2]));
        System.out.println("Arrays.toString(score[3]) = " + Arrays.toString(score[3]));

        System.out.println();
        // 출력 예 2 : for
        System.out.println("for");
        for (int i = 0; i < score.length; i++) {
            for (int j = 0; j < score[i].length; j++) {
                System.out.println("score[" + i + "][" + j + "] = " + score[i][j]);
            }
            System.out.println();

        }

        System.out.println();
        // 출력 예 3 : 향상된 for
        System.out.println("향상된 for");
        for (int[] ints : score) {
            for (int it : ints) {
                System.out.println("anInt = " + it);
            }
            System.out.println();
        }
    }
}

 

문자열 비교 - 1차원 비교 = equals(), 2차원 비교 = deepEquals()

class Arrays6_1 {
    public static void main(String[] args) {
        int[] num = {0, 1, 2};
        int[][] score = {
                {88, 35, 100},
                {84, 60, 55},
                {100, 99, 72},
                {33, 54, 77}
        };

        System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
        System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));
        System.out.println();

        String[][] strArr1 = {
                {"AAA","BBB","CCC"},
                {"aaa","bbb","ccc"},
        };
        String[][] strArr2 = {
                {"AAA","BBB","CCC"},
                {"aaa","bbb","ccc"},
        };

        // 1 차원 비교에는 equals
        System.out.println("Arrays.equals(strArr1[0], strArr2[0]) = " + Arrays.equals(strArr1[0], strArr2[0])); // true
        System.out.println("Arrays.equals(strArr1[1], strArr2[0]) = " + Arrays.equals(strArr1[1], strArr2[0])); // false

        System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2)); // false

        System.out.println();
        // 다차원 비교에는 deepEquals
        System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2)); // true
    }
}

 

배열 복사 - 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)); // Arrays.toString(arr) = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}

'TIL > JAVA' 카테고리의 다른 글

23.04.21  (0) 2023.04.21
23.04.20  (0) 2023.04.21
23.04.14  (0) 2023.04.17
23.04.12  (0) 2023.04.12
23.04.10  (0) 2023.04.11