본문 바로가기

JAVA

231212 Java

코딩도장 UP & DOWN 숫자 맞추기 게임

public static void main(String[] args) {
    int random = (int) (Math.random() * 100 + 1);
    Scanner sc = new Scanner(System.in);
    int count = 1;
    System.out.println("컴퓨터가 1 ~ 100 중 랜덤 숫자 하나를 정합니다.");
    System.out.println("이 숫자를 맞춰주세요.");
    while (true) {
        System.out.print("1 ~ 100 숫자 입력 : ");
        int temp = sc.nextInt();

        if (temp > random) {
            System.out.println("DOWN");
            count++;
        } else if (temp < random) {
            System.out.println("UP");
            count++;
        } else {
            System.out.println("정답입니다. " + count + "회 만에 맞췄어요.");
            break;
        }
    }
    sc.close();
}

 

Array 복사

public static void main(String[] args) {
    int[] arr1 = new int[] { 10, 20, 30, 40, 50, 60 };
    int[] arr2 = new int[arr1.length];
    // 깊은 복사 : 실제 값을 새로운 메모리 공간에 복사
    // 얕은 복사 : 주소 값을 복사

    arr2 = arr1; // 얕은 복사

    System.out.println(Arrays.toString(arr1)); // [10, 20, 30, 40, 50, 60]
    System.out.println(Arrays.toString(arr2)); // [10, 20, 30, 40, 50, 60]
    System.out.println(arr1); // [I@1b6d3586
    System.out.println(arr2); // [I@1b6d3586
    arr1[5] = 70; // arr1 의 값을 변경
    arr2[0] = 100; // arr2 의 값을 변경
    System.out.println(Arrays.toString(arr1)); // [100, 20, 30, 40, 50, 70]
    System.out.println(Arrays.toString(arr2)); // [100, 20, 30, 40, 50, 70]
    // arr1 과 arr2 가 같은 주소를 참조하고 있기 때문에 어디서 변경해도 상관 없음

    System.out.println("---------------------------");

    arr2 = new int[arr1.length]; // 깊은 복사

    arr2[0] = arr1[0];
    arr2[1] = arr1[1];
    arr2[2] = arr1[2];
    arr2[3] = arr1[3];
    arr2[4] = arr1[4];
    arr2[5] = arr1[5];

    System.out.println(Arrays.toString(arr1)); // [100, 20, 30, 40, 50, 70]
    System.out.println(Arrays.toString(arr2)); // [100, 20, 30, 40, 50, 70]

    arr1[0] = 1000;
    arr2[5] = 6;

    System.out.println(arr1); // [I@1b6d3586
    System.out.println(arr2); // [I@4554617c
    System.out.println(Arrays.toString(arr1)); // [1000, 20, 30, 40, 50, 70]
    System.out.println(Arrays.toString(arr2)); // [100, 20, 30, 40, 50, 6]
    // 서로 다른 주소를 참조하고 있기 때문에 값이 개별적으로 변경됨
}

 

System.arraycopy()

public static void main(String[] args) {
    int[] arr1 = new int[] { 10, 20, 30, 40, 50, 60 };
    int[] arr2 = new int[arr1.length];

    System.arraycopy(arr1, 0, arr2, 0, arr1.length);
    /*
    arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    src : 원본
    srcPos : 어느 위치(index 번호)부터 복사할 지
    dest : 값을 담을 배열
    destPos : 어느 위치(index 번호)에 담을지
    length : 어느 길이 만큼 복사할 지
     */
    System.out.println(arr1); // [I@1b6d3586
    System.out.println(arr2); // [I@4554617c
    System.out.println(Arrays.toString(arr1)); // [10, 20, 30, 40, 50, 60]
    System.out.println(Arrays.toString(arr2)); // [10, 20, 30, 40, 50, 60]

    int[] arr3 = new int[arr2.length];
    arr3 = arr2.clone();
    System.out.println(arr2); // [I@4554617c
    System.out.println(arr3); // [I@74a14482
    System.out.println(Arrays.toString(arr2)); // [10, 20, 30, 40, 50, 60]
    System.out.println(Arrays.toString(arr3)); // [10, 20, 30, 40, 50, 60]
}

 

다차원 배열로 이것 저것 해보기

public static void main(String[] args) {
    // 1차원 배열
    // 2차원 배열
    // 3차원 배열

    // int[][][] arr1 = new int[3][3][3]; // 27
    int[][][][] arr1 = new int[3][3][3][3]; // 81

    int num = 1;
    for (int i = 0; i < arr1.length; i++) {
        for (int j = 0; j < arr1[i].length; j++) {
            for (int k = 0; k < arr1[i][j].length; k++) {
                for (int l = 0; l < arr1[i][j][k].length; l++) {
                    arr1[i][j][k][l] = num++;
                }
            }
        }
    }
    for (int[][][] i : arr1) {
        for (int[][] is : i) {
            for (int[] iss : is) {
                for (int isss : iss) {
                    System.out.printf("%3d", isss);
                }
                System.out.println();
            }
            System.out.println();
        }
        System.out.println();
    }
}

 

ArrayList 이용한 2차원 배열 만들기

public static void main(String[] args) {
    ArrayList<ArrayList<Integer>> list2 = new ArrayList<>(); // 2차원 배열
    ArrayList<Integer> list = new ArrayList<>(); // 1차원 배열

    list.add(1);
    list.add(2);
    list.add(3); // 내부에 값 1,2,3  추가
    list2.add(list); // 외부 리스트에 내부 리스트 추가
    System.out.println(list2); // [[1, 2, 3]]

    list = new ArrayList<>(); // 새로운 배열 선언
    list.add(4);
    list.add(5);
    list.add(6); // 내부 값 4,5,6 추가
    list2.add(list); // 4,5,6 배열을 추가
    System.out.println(list2); // [[1, 2, 3], [4, 5, 6]]
    System.out.println(list2.get(0).get(0)); // [1,2,3] 배열의 0 번째 인덱스 값 확인
}

 

배열 변환

public static void main(String[] args) {
    // 배열의 형태 변환
    int number = 97;
    char[] chArray = new char[10];
    for (int i = 0; i < chArray.length; i++) {
        chArray[i] = (char) number++;
    }
    System.out.println(Arrays.toString(chArray));
    // [a, b, c, d, e, f, g, h, i, j]

    for (char c : chArray) {
        System.out.printf("%2c", c);
    }
    System.out.println();

    // String 에서 char 추출하고 배열에 집어넣기
    String name = "홍길동";
    // 문자열 = 문자의 집합 = 문자가 이어져 있음
    // 문자 : 하나의 글자

    chArray[0] = name.charAt(0);
    chArray[1] = name.charAt(1);
    chArray[2] = name.charAt(2);
    System.out.println(Arrays.toString(chArray));
    // [홍, 길, 동, d, e, f, g, h, i, j]

    chArray = name.toCharArray();
    System.out.println(Arrays.toString(chArray)); // [홍, 길, 동]
    // 배열의 길이도 변경

    String temp = String.valueOf(chArray);
    temp = new String(chArray);
    System.out.println(temp); // 홍길동

    String str = "홍길동"; // 값이 변경될 때마다 지우고 새로운 위치로 이동
    System.out.println(str.getBytes()); // [B@7ea987ac
    str += "?";
    System.out.println(str.getBytes()); // [B@29453f44
    System.out.println(str); // 홍길동?
}

 

String 문자열

public static void main(String[] args) {
    // String 용법
    /*
    독특함
    불변, 주소값, 문자열, 나누기, GC

    문자열을 저장, 값 저장할 때 "" 를 사용
    "" 값을 기준으로 인스턴스를 생성
    값이 같으면 같은 값을 가진 기존의 인스턴스를 참조
    */
    String hi = "Hi";
    String hi2 = "Hi";
    String hi3 = new String("Hi");
    System.out.println(hi == hi2); // true
    System.out.println(hi == hi3); // false, 서로 다른 인스턴스를 참조
    System.out.println(System.identityHashCode(hi)); // 460141958
    System.out.println(System.identityHashCode(hi2)); // 460141958
    System.out.println(System.identityHashCode(hi3)); // 1163157884
    System.out.println(hi2.equals(hi3)); // true, hi2 와 hi3 의 문자열을 비교

    String i = "";
    for (int j = 0; j < 20; j++) { // 값이 하나씩 추가될 때마다 메모리를 지우고
        i += j; // 다시 새로운 메모리에 값 저장하는 일 반복
    }

    // String 대신 사용하는 것
    StringBuilder sb = new StringBuilder();
    sb.append("Hi");
    sb.append("hi");
    sb.append("Hello");
    sb.append("안녕");
    System.out.println(sb); // HihiHello안녕
    sb.delete(1,2); // index 1번부터 시작 2번 이전까지
    System.out.println(sb); // HhiHello안녕
    String temp = sb.toString();
    for (int j = 0; j < 20; j++) {
        sb.append(j); // 고정된 메모리 위치에 있는 sb 에 값만 추가
    }

    temp = "안녕하세요.";
    System.out.println(temp.indexOf("하")); // 2
    System.out.println(temp.indexOf("아")); // -1, 없으면 -1 출력
    // 특정 문자가 몇 번째 인덱스에 있는지 출력, int 형
    System.out.println(temp.contains("녕")); // true
    System.out.println(temp.contains("아"));// false
    // 문자열 내 문자 포함 여부, boolean 형
}

'JAVA' 카테고리의 다른 글

231214 Java 객체지향  (2) 2023.12.14
231213 Java  (0) 2023.12.13
231211 Java  (2) 2023.12.11
231208 Java  (0) 2023.12.08
231207 Java  (0) 2023.12.07