코딩도장 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 |