210525~220812

#6 자바 배열 210530

hansssi 2021. 5. 30. 02:49

자바 배열 선언 방법

int[] intArray; // 초기화 안하고 선언만

int[] intArray = new int [5]; // 선언 및 빈 배열 생성

int[] intArray = {1, 2, 3, 4, 5}; // 리터럴로 생성, 변수를 정의 할 때만 사용 가능

intArray.length로 크기 받아올 수 있다. 

 

 

Aliasing

int[] arr1 = {1, 2, 3, 4, 5};

int[] arr2 = arr1; 

arr[0] = 100;

일 때 arr2[0]을 출력하면 100이 나온다. arr1과 arr2가 똑같은 주소를 가리키기 때문에 arr2를 arr1의 'Alias(가명)'이라 할 수 있다고 한다...

값을 복사하기 위해서는 clone 메소드를 사용 

ex) int[] arr2 = arr1.clone();

 

 

for-each

에... 파이썬에도 있다는데 사실 모르고 썼다. 그냥 for문인줄 알았는데...

파이썬에서는 for i in intArray 같은 형식으로 쓰는게 for-each인가? 그런가보다

자바에서는 

for(int i : intArray) {
	System.out.println(i);
}    

같은 방법을 사용한다. i = 0 부터 시작

 

 

예제풀이

c언어를 첫 프로그래밍 언어로 배운 입장에서 문자열 배열(String[])이라는게 좀 웃기다. 애초에 문자열이 문자(char)형의 배열이 아니었던가...? 아님 말고 껄껄

그래서 c로 문자열 처리하는게 제일 빡치는 거겠지......

 

암튼 예제를 풀고 풀이를 볼 때마다 내가 얼마나 비효율적으로 코드를 짜는지 알게 되는것 같아서 살짝 우울하다. 뭐 많이 하다보면 잘 하게 되겠지!! ......되겠지?

 

이번 예제는 음

1. 크기 30 정수형 배열 intArray 선언

2. intArray에 1001...1030 입력

3. 크기 4 문자열형 배열 remainders 선언하여 Zero, One, Two, Three 입력

4. intArray%4를 인덱스로 하여 remainders 배열 출력(for-each 사용)

이다. 

 

2번까지는 나름 괜찮았다. 3번은 String[]으로 할걸 처음에 char[]로 해서 틀렸지만... 아 빨리 고쳤음 된거지

그런데 4번을 하면서 intArray 값을 어떻게 건드려야 할지 몰라서 위에서 배운 clone을 써서 intArray를 복제하고 이걸 일일이 반복문 돌려서 나머지 값 저장해서 이걸 인덱스로 remainders를 출력하게된 것이다....... 이 무슨 비효율의 극치람. 이정도로 일 돌아돌아 하는 것도 재능 아닐까? 전혀 기쁘지 않다. 

그래서 내가 풀이한 코드는 아래와 같다. 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성하세요.
        int[] intArray = new int [30];
        for(int i = 0; i < intArray.length; i++){
            intArray[i] = 1000 + i + 1;
        }
        String[] remainders = {"Zero", "One", "Two", "Three"};
        
        int[] remainArr = intArray.clone();
        for(int i = 0; i < remainArr.length; i++){
            remainArr[i] = remainArr[i] % 4;
        }
        for(int i : remainArr){
            System.out.println(remainders[i]);
        }
    }
}

풀이 영상을 보니 마지막 for-each문에서 intArray를 받아와 출력할 때 remainders[i % 4]를 써서 해결했더라. 왜 난 째깍째깍 이런 코드는 생각 못하는 걸까. 왜 굳이 쉽게 갈 길을 돌아서 가야하는가. 이런 나를 써줄 회사가 있을 것인가? 정녕 나의 미래는 중소기업 코딩노예인 것인가? 이런 한심한 실수를 반성하기 위해 하는 오답노트용 블로그다. 앞으로는 반성하고 똑바로 하자!

 

그래서 고친 코드는 아래와 같다. 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성하세요.
        int[] intArray = new int [30];
        for(int i = 0; i < intArray.length; i++){
            intArray[i] = 1000 + i + 1; //사실 얘도 굳이 이렇게 안하고 1001 + i 하면 되지만 이런 사소한 문제는 넘어가도록 하자
        }
        String[] remainders = {"Zero", "One", "Two", "Three"};
        
        for(int i : intArray){
            System.out.println(remainders[i % 4]);
        }
    }
}

이야 정말 간결하자너...... 반성하자 나 자신. 나머지 출력하는것 같다는건 알았으면서,,,, 왜,,,,

 

 

 

이 뒤에 예제 하나 더 있는데 하기 싫으므로 오늘은 요기까즤 

오늘은 이정도면 많이 했다고 생각한다!!! 아마!!!!