몬그로이

자바의 정석 5. 배열(Array) 본문

Organizing Docs/Java Docs

자바의 정석 5. 배열(Array)

Mon Groy 2024. 6. 18. 20:00
int result = add(new int[]{1,2,3,4,5}); //new 를 생략할 수 없다

//

System.out.println(Arrays.toString(iArr)); //배열을 문자로 바꿔 출력하기

//

char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd 로 출력됨

//

char[] abc = {'A', 'B', 'C', 'D'};
char[] num1 = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',};

char[] result = new char[abc.length + num1.length];
System.arraycopy(abc, 0, num1, 0, abc.length);
System.arraycopy(abc, 0, num1, 6, 3); //num1[6] 위치부터 즉, 7번째 칸 부터
int[] numArr = new int[10];

for (int i = 0; i < numArr.length; i++) {
    numArr[i] = i;
}

for (int i = 0; i < 100; i++) {
    int n = (int) (Math.random() * 10); //random 은 0.0 이상 1.0 미만의 수 반환
    int tmp = numArr[0];
    numArr[0] = numArr[n]; 
    numArr[n] = tmp;
}//애초에 생성한 배열이 중복값이 없는 상태이며
//n은 몇 번째 자릿수인지만 지정하는 것이므로
// 요소에 중복값이 나올 수 없음
int[] numArr = new int[10];

for (int i = 0; i < numArr.length; i++) {
    System.out.print(numArr[i] = (int) (Math.random() * 10));
}
System.out.println();

for (int i = 0; i < numArr.length - 1; i++) {
    boolean changed = false;

    for (int j = 0; j < numArr.length - 1 - i; j++) {
        if (numArr[j] > numArr[j + 1]) {
            int temp = numArr[j];
            numArr[j] = numArr[j + 1];
            numArr[j + 1] = temp;
            changed = true;
        }
    }

    if(!changed) break;
    //자리바꿈이 일어나지 않은 경우(if문 충족x 인 경우) break

버블 정렬(bubble sort)

앞 요소와 뒷 요소를 비교하여

앞 요소가 더 크면 뒷 요소와 바꾼다

i < numArr.length - 1로 두는 이유는

numArr[0] 에 있던 요소가 제일 큰 수라고 가정했을 때

numArr[9] 로 이동하는 칸은 아무리 커도 length - 1 칸이기 때문

 

numArr.length - 1 - i 로 두는 이유는

한 번 돌고 나면 제일 끝 요소가 채워지므로

제일 끝 요소는 비교할 필요가 없기 때문

 

int[] numArr = new int[10]; //{0,0,0,...,0}
int[] counter = new int[10]; //{0,0,0,...,0}

for (int i = 0; i < numArr.length; i++) {
    numArr[i] = (int) (Math.random() * 10); //numArr 각 요소에 임의의 수 배정
    System.out.print(numArr[i]);
}
System.out.println();

for (int i = 0; i < numArr.length; i++) {
    counter[numArr[i]]++;
}
//counter 의 "numArr[i] + 1 번째 요소" 가 0 -> 1 이 됨
// numArr 배열의 서로 다른 요소의 값이 같다면 counter 배열의  그 요소값 + 1 번째 자리는 ++ 됨
// 즉 요소값이 0 -> 1 -> 2 -> ..이고 최대 10까지 가능한 것

for (int i = 0; i < numArr.length; i++) {
    System.out.println(i + "의 개수 : " + counter[i]);
}
//counter의 인덱스 = numArr의 요소값이므로
//counter의 인덱스에 해당하는 값은 numArr의 요소값이 몇 개씩 들어있었는지 알 수 있음

char[] hex = {'C', 'A', 'F', 'E'};

String[] binary = { "0000", "0001", "0010","0011",
                    "0100", "0101", "0110", "0111",
                    "1000", "1001", "1010", "1011",
                    "1100", "1101", "1110", "1111"};

String result = "";

for (int i = 0; i < hex.length; i++) {
    if (hex[i] >= '0' && hex[i] <= '9') {
        result += binary[hex[i] - '0'];
    } else {
        result += binary[hex[i] - 'A' + 10]; //binary 10~15번 index 중 지정됨
    }
    //hex[0] = 'C' : 유니코드로 67
   // * 'A' : 유니코드로 65 -> 'C' 와 'A' 의 차 = 2
}

 

String 클래스 주요 메서드

 

char charAt(int indext) : 문자열에서 해당 index에 위치한 문자를 반환

int length() : 문자열의 길이 반환

String substring(int from, int to) : 문자열에서 해당 범위(from ~ to)에 있는 문자열 반환(to는 미포함)

boolean equals(Object obj) : 문자열의 내용이 obj 와 같은지 확인 (대소문자 구분) 

*equalsIgnoreCase() : 대소문자 구분 없이 확인

**변수 값 비교는 연산자 '==' 사용

char[] toCharArray() : 문자열을 문자배열로 변환하여 반환

 

String source = "SOSHELP";
String[] morse = { /*26개의 index 생략*/};
String result = "";

for (int i = 0; i < source.length(); i++) {
    result += morse[source.charAt(i) - 'A'];
} // index 가 "0번째일 때" A를 가리키는 부호가 나오려면 A를 빼야함
// 'A' - 'A' = 65 - 65 = 0
for (int i = 0; i < score.length; i++) {
    for (int j = 0; j < score[i].length; j++) {
        score[i][j] = 0;
    }
} //2차원 배열 초기화
int[][] score = new int[5][];
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[2];
score[4] = new int[3];