본문 바로가기
캠퍼스/Java

30. 코드 단순화

by Sylar 2022. 8. 1.

     저번에 Array에 대해 배울때 쓴 코드를 단순화 시키는 과정이다.

package ex06;

public class BubbleEx01 {

public static void main(String[] args) {

    int[] arr = { 40, 30, 10, 8, 5 };

    if (arr[0] > arr[1]) {
        int temp;
        temp = arr[0];
        arr[0] = arr[1];
        arr[1] = temp;
    }

    if (arr[1] > arr[2]) {
        int temp;
        temp = arr[1];	
        arr[1] = arr[2];
        arr[2] = temp;

    }
    if (arr[2] > arr[3]) {
        int temp;
        temp = arr[2];
        arr[2] = arr[3];
        arr[3] = temp;

    }
    if (arr[3] > arr[4]) {
        int temp;
        temp = arr[3];
        arr[3] = arr[4];
        arr[4] = temp;

    }

    System.out.println("=== 1번째 사이클 종료 ===");
    System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
    if (arr[0] > arr[1]) {
        int temp;
        temp = arr[0];
        arr[0] = arr[1];
        arr[1] = temp;
    }

    if (arr[1] > arr[2]) {
        int temp;
        temp = arr[1];
        arr[1] = arr[2];
        arr[2] = temp;

    }
    if (arr[2] > arr[3]) {
        int temp;
        temp = arr[2];
        arr[2] = arr[3];
        arr[3] = temp;

    }

    System.out.println("=== 2번째 사이클 종료 ===");
    System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
    if (arr[0] > arr[1]) {
        int temp;
        temp = arr[0];
        arr[0] = arr[1];
        arr[1] = temp;
    }

    if (arr[1] > arr[2]) {
        int temp;
        temp = arr[1];
        arr[1] = arr[2];
        arr[2] = temp;

    }

    System.out.println("=== 3번째 사이클 종료 ===");
    System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
    if (arr[0] > arr[1]) {
        int temp;
        temp = arr[0];
        arr[0] = arr[1];
        arr[1] = temp;
    }

    System.out.println("=== 4번째 사이클 종료 ===");
    System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4] + "\n");
    System.out.println("== 정렬이 완료 되었습니다 ==");
    System.out.println("\t" + arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3] + " " + arr[4]);

}

}

 

     arr[0] 부터 arr[5]사이의 값이 모든 if문에 들어가있는게 보인다.

      

     숫자가 1씩 증가한다? 바로 for문으로 단순화 할 수 있다.

 

package ex06;

import java.util.Arrays;

public class bubbleEx02 {

public static void main(String[] args) {

    int[] arr = { 40, 30, 10, 8, 50,5 };


    //사이클 단순화
    for (int i = 0; i<5; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }

    for(int i=0; i<arr.length; i++) 
        System.out.println(arr[i]);
    System.out.println("=== 1번째 사이클 종료 ===");


    for (int i = 0; i<4; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }
    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== 2번째 사이클 종료 ===");


    for (int i = 0; i<3; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }

    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== 3번째 사이클 종료 ===");


    for (int i = 0; i<2; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }

    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== 4번째 사이클 종료 ===");


    for (int i = 0; i<1; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }

    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== 5번째 사이클 종료 ===");

    System.out.println("== 정렬이 완료 되었습니다 ==");
    System.out.println(Arrays.toString(arr));

}

}

 

     좀더 보기 편하고 간결하게 변했다.

 

     코드에 일부를 잠시 설명하자면 다음과 같다

 

for (int i = 0; i<5; i++) {         // 5번반복 
    if (arr[i] > arr[i+1]) {        // arr[0] > arr[1]과 같은말.
        int temp;                   // 변수값 스위칭을 위한 코드
        temp = arr[i];              // arr[0]의 값을 temp에 대입
        arr[i] = arr[i+1];          // arr[1]의 값을 arr[0]에 대입
        arr[i+1] = temp;            // temp의 값을 arr[1]에 대입
    }
}
    for(int i=0; i<arr.length; i++) // i<arr.lebgth; = arr안의 값의 갯수 즉 5를 의미
        System.out.println(arr[i]); // 0~5까지의 값을 출력
    System.out.println("=== 1번째 사이클 종료 ===");

 

     여기서 눈여겨 볼 것은

   

for (int i = 0; i<5; i++) {         // 5번반복
                   ~
System.out.println("=== 1번째 사이클 종료 ===");

 

     i<5 부분이다. 코드를 자세히 보면 5에서 1씩 감소하는 모습이다. 이것도 for로 줄여보자.

     덤으로 1번째 사이클 종료의 숫자도 바꿔보자.

 

package ex06;

import java.util.Arrays;

public class bubbleEx03 {

public static void main(String[] args) {

int[] arr = { 40, 30, 10, 8, 5, 50 };
int n=1;	
int k=arr.length;
    for (int i = 0; i<k-1; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }

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

    System.out.println("=== "+n+"번째 사이클 종료 ===");

    n++;
    for (int i = 0; i<k-1; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }
    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== "+n+"번째 사이클 종료 ===");

    n++;
    for (int i = 0; i<k-1; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }
    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== "+n+"번째 사이클 종료 ===");

    n++;
    for (int i = 0; i<k-1; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }
    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== "+n+"번째 사이클 종료 ===");


    for (int i = 0; i<k-1; i++) {
        if (arr[i] > arr[i+1]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
    }
    for(int i=0; i<arr.length; i++) {
        System.out.println(arr[i]);
    }
    System.out.println("=== "+n+"번째 사이클 종료 ===");

    System.out.println("== 정렬이 완료 되었습니다 ==");
    System.out.println(Arrays.toString(arr));

    }
}

     

     int n =1;을 하나 적어 n번째 사이클 종료 라고 표시했다. 

     int k = arr.length; 를 응용하여 5부터 for문을 거칠때 마다 1씩 감소하게 적었다.

 

     여기서 더 줄일수도 있다. 똑같은 for문을 5개나 적었기 때문에.

 

package ex06;

import java.util.Arrays;

public class bubbleEx04 {
public static void main(String[] args) {

    int[] arr = {40, 30, 10, 8, 5, 50};
    int n = 1;
    int k = arr.length;
    for (int j = 0; j < k; j++) {
        for (int i = 0; i < k - 1; i++) {
            if (arr[i] > arr[i + 1]) {
                int temp;
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("=== " + n + "번째 사이클 종료 ===");
        n++;
    }
    System.out.println("== 정렬이 완료 되었습니다 ==");
    System.out.println(Arrays.toString(arr));

}

}

     한 화면에 들어오지도 않던 첫번째 코드는 어디가고

    

     줄이고 줄이다 보니 간결해진 모습으로 나타났다.

 

     이런식으로 패턴을 파악하여 코드를 줄여나가는 것을 많이 연습해야 한다.

'캠퍼스 > Java' 카테고리의 다른 글

32.디버깅  (0) 2022.08.02
31.private  (0) 2022.08.02
29. Array  (0) 2022.08.01
28.JVM  (0) 2022.07.31
27.method  (0) 2022.07.31