ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA 17] 자바 고정 배열 ( Array )
    Language/Java 2018. 2. 10. 13:28
    반응형


    ■ 배열 ( Array )

    1. '같은 타입' 의 데이터를 저장하는 ' 저장소 객체'

    생성시 그 크기가 고정된다. (=고정배열) 


    2. 선언

    tpye 배열변수[];


    3. 생성

    new tpye[크기];


    4. 초기화

    배열변수[0] = 데이터1;

    배열변수[1] = 데이터2;

      ...

    배열변수[n-1] = 데이터n;


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    class ArrayS1{        // Array Study 01
        
        int as[];                // 1. 선언
     
        ArrayS1(){
            as = new int[5];     // 2. 생성 (5개의 방을 생성한다)
            System.out.println("as[] 배열의 크기는 : " + as.length + " 이다.");
        }
     
        void in(){
            for(int i=0 ; i < as.length ; i++){
                as[i] = i;        // 3. 초기화                
            }                                    // 출력 하고 싶은 값
            System.out.println("저장 완료");      // as[0] = 1;       
        }                                        // as[1] = 2;       
    // as[2] = 3;
                 // 인간 : 1 , 2 , 3 , 4 , 5 // as[3] = 4;
                 // 기계 : 0 , 1 , 2 , 3 , 4      // as[4] = 5;
                                                    
        void out(){                // 4. 사용한다.
            for(int i=0 ; i < as.length ; i++){
                System.out.println("as[ " + i + " ] : " + as[i]);
            }
        }
     
        public static void main(String[] args){
            ArrayS1 as1 = new ArrayS1();
            System.out.println("");    
            as1.in();
            System.out.println("");
            as1.out();
        }
    }

    cs



    배열변수.length 가 나타났다고 당황하지 말도록 하자!!

    배열에서의 length는 배열의 길이(=크기)를 알려주는 역할을 한다.

    유용하게 사용하도록 하자!!


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class ArrayS2{
        String strs[];                // 1. 선언
        
        ArrayS2(){
            strs = new String[4];     // 2. 생성
        }
     
        void in(){                
            strs[0= "봄";           // 3. 초기화
            strs[1= "여름";
            strs[2= "가을";
            strs[3= "겨울";
            System.out.println("<< 저장 완료 >>");
        }
     
        void out(){                   // 4. 사용한다.
            for(int i = 0 ; i < strs.length ; i++){
                System.out.println(" strs[ " + i + " ] : " + strs[i]);
            }
        }
     
        public static void main(String[] args){
            ArrayS2 as2 = new ArrayS2();
            as2.in();
            as2.out();
        }
    }
    cs




    cf) default 초기값

    - 기본형 : 0 , 0L , 0.0f , 0.0

    - 참조형 : null


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class ArrayS3{
        byte as[] = new byte[10];        // 1. 정수형
        short bs[] = new short[10];
        int ds[] = new int[10];
        long es[] = new long[10];
        float fs[] = new float[10];      // 2. 실수형
        double gs[] = new double[10];
        boolean hs[] = new boolean[10];  // 3. 불린형
        String is[] = new String[10];    // 4. 참조형
     
        void out(){
            System.out.println("1. 정수형 배열의 초기값");
            System.out.println(" byte[0]    : " + as[0]);
            System.out.println(" short[0]   : " + bs[0]);
            System.out.println(" int[0]     : " + ds[0]);
            System.out.println(" long[0]    : " + es[0+ "\n");
            System.out.println("2. 실수형 배열의 초기값");
            System.out.println(" float[0]   : " + fs[0]);
            System.out.println(" double[0]  : " + gs[0+ "\n");
            System.out.println("3. boolean형 배열의 초기값");
            System.out.println(" boolean[0] : " + hs[0+ "\n");
            System.out.println("4. 참조형 배열의 초기값");
            System.out.println(" String[0]  : " + is[0]);
        }
     
        public static void main(String[] args){
            new ArrayS3().out();
        }
    }
    cs



    5. 선언 + 생성

    type 배열변수[] = new type[n];

        n = 원하는 크기만큼


    6. 선언 + 생성 + 초기화

    type 배열변수[] = { 데이터1 , 데이터2 , ~ , 데이터n };

    ※ ' 선언 + 생성 + 초기화 ' 시에는

       ' 선언 ' 을 분리할 수 없다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    class ArrayS4{
        
        int as[] = new int[4];        // (1)선언 + (2)생성
        
        void in1(){
            as[0= 1;                // (3)초기화
            as[1= 2;
            as[2= 3;
            as[3= 4;
        }
     
        void out1(){
            for(int i=0 ; i < as.length ; i++){
                System.out.println("as[ " + i + " ] : " + as[i]);
            }
        }
     
        int bs[] = {1 , 2 , 3 , 4};    // (1)선언 + (2)생성 + (3)초기화
        
        void out2(){
            for(int i=0 ; i < as.length ; i++){
                System.out.println("bs[ " + i + " ] : " + bs[i]);
            }
        }
     
        public static void main(String[] args){
            ArrayS4 as4 = new ArrayS4();
            as4.in1();
            as4.out1();
            System.out.println("");
            as4.out2();
        }
    }
    cs



    void out1() 과 voud out2() 의 결과는 같다는 것을 알 수 있습니다.

    여러분이라면 어떤 로직을 선호 하십니까??


    선언과 생성 그리고 초기화를 한번에 할 경우에는

    확실하게 로직이 짧아지게 되고 간결하게 보이게 됩니다.

    아직 학생이지만, 

    저의 입장에서는 로직이 짧고 간결한 경우에는 실력이 더 높다고 느껴지네요.


    7. 배열의 형변환

    ex) short sA[] = { a , b , (short)c};        byte a; , short b; , int c;

         Object objs[] ={ str , obj };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class ArrayS5{
        byte a = 10;
        short b = 20;
        int c = 30;
           // Short Array
        //short sA1[] = {a , b , c};         // 1번
        short sA2[] = {a , b , (short)c};    // 2번
     
        void use1(){
            for(int i=0 ; i<sA2.length ; i++){
                System.out.println(" Short Array[ " + i + " ] : " + sA2[i]);
            }
        }
     
        public static void main(String[] args){
            ArrayS5 as5 = new ArrayS5();
            as5.use1();
        }
    }
    cs


    [ error : incompatible types: possible lossy conversion from int to short ]

    에러 : 공존할 수 없는 타입 : int 에서 short 로 전환시에 파일 정보가 손실될 수 있다.

     (함께 쓸 수 없는 타입) 

     (호환성이 없는 타입)




    8. 이차원 배열

    일차원 배열을 하나의 데이터로 취급하는 배열


    9. 다차원 배열 (=N차원배열)

    n-1 차원 배열을 하나의 데이터로 취급하는 배열


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class ArrayS6{
        int as[] = {1 , 2};
        int bss[][] = {as , {3} , {4 , 5}};
        int csss[][][] = {bss , {{6}} , {{7 , 8}}};
     
        void out1(){    // 1. 2차원 배열 bss[][] 를 출력해보자!
            try{        // Exception 예외 처리에 대해서는 다음 포스팅에서 설명하겠습니다.
                System.out.println("bss[ 0 ][ 0 ] : " + bss[0][0]);    // [0][0] = 1
                System.out.println("bss[ 0 ][ 1 ] : " + bss[0][1]);    // [0][1] = 2
                System.out.println("bss[ 1 ][ 0 ] : " + bss[1][0]);    // [1][0] = 3 , [1][1] 은 없다.
                System.out.println("bss[ 2 ][ 0 ] : " + bss[2][0]);    // [2][0] = 4
                System.out.println("bss[ 2 ][ 1 ] : " + bss[2][1]);    // [2][1] = 5
            }catch(Exception e){}
        }
     
        void out2(){    // 2. 2차원 배열 bss[][] 를 출력 해보자!(반복문 이용)
            for(int i=0 ; i < bss.length ; i++){
                for(int j=0 ; j < bss[i].length ; j++){
                    System.out.println("bss[ " + i + " ][ " + j + " ] : " + bss[i][j]);
                }
            }
        }
     
        void out3(){    // 3. 3차원 배열 csss[][][] 를 출력 해보자!
            for(int i=0 ; i < csss.length ; i++){
                for(int j=0 ; j < csss[i].length ; j++){
                    for(int k=0 ; k < csss[i][j].length ; k++){
                        System.out.println("csss[ " + i + " ][ " + j + " ][ " + k + " ] : " + csss[i][j][k]);
                    }
                }
            }
        }
     
        public static void main(String[] args){
            ArrayS6 as6 = new ArrayS6();
            as6.out1();
            System.out.println("");
            as6.out2();
            System.out.println("");
            as6.out3();
        }
    }
    cs


    저는 void out1() 처럼 배열의 행과 열을 한번에 알 수 없습니다 ( ; - ; )

    이게 void out3() 처럼 3차원 배열 또는 더더욱 많아진 n차원 배열까지 계산 할 수 있으신가요??

    그렇다면 정말 대단하다고 생각합니다.

    저는 반복문을 돌려서야 확인 할 수 있거든요..

    반응형
Designed by Tistory.