ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2-3차원배열,향상된for문
    JAVA 2021. 7. 21. 22:24

    배열문

    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
    43
    44
    45
    46
    47
    package chapter3;
     
    public class Array {
     
        public static void main(String[] args) {
            ex1();
            test1();
     
        }
     
        // 배열의 기초
        public static void ex1() {
            int[] arr1 = new int[5];
     
            arr1[0= 1;
            arr1[1= 2;
            arr1[2= 3;
            arr1[3= 4;
            arr1[4= 5;
     
            for (int i = 0; i < arr1.length; i++) {
                System.out.print(arr1[i] + "  ");
            }
            System.out.println();
     
            int[] arr2 = { 987654321 };
            for (int i = 0; i < arr2.length; i++) {
                System.out.print(arr2[i] + "  ");
            }
            System.out.println();
     
            int[] arr3 = new int[] { 4321 };
            for (int i = 0; i < arr3.length; i++) {
                System.out.print(arr3[i] + "  ");
            }
            System.out.println();
     
            char carr[] = new char[5];
            carr[0= 'A';
            carr[1= 'B';
     
            for (int i = 0; i < carr.length; i++) {
                System.out.print(carr[i] + "  ");
            }
     
        }
    }
    cs

    int[] arr1 = new int[5];

    int[] arr2 = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };

    int[] arr3 = new int[] { 4, 3, 2, 1 };

    세가지 다 가능.

    int arr1[] 와

    int[] arr1 도 가능


    향상된 for문

    for (String s : strArr){}

    's' 에 배열 strArr을 대입.

    String 같은 참조 자료형만 들어갈 수 있다.

    int 같은 기본 자료형은 들어갈 수 없다.

    int 대신 integer이 들어갈 수 있음

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        // 향상된 for문
        public static void ex2() {
     
            String strArr[] = { "강아지""고양이""앵무세", };
     
    //        for (int i = 0; i < strArr.length; i++) {}
            for (String s : strArr) {
                System.out.print(s + " ");
            }
        }
    cs

    + main함수의 String[] args의 'args 문자배열'은 어디에 쓰이는가?

    - 주로 테스트용이다.

    방법: 위에 실행 메뉴 --> Run Configurations... --> (x)=Arguments --> Program arguments 에 테스트할 문장 입력

    ex) 유재석 강호동 아이유

    1
    2
    3
    4
    5
        public static void main(String[] args) {
            System.out.println(args[0]);
            System.out.println(args[1]);
            System.out.println(args[2]);
    }
    cs

    실행시 arg[0]에 유재석, arg[1]에 강호동, arg[3]에 아이유가 나온다.


    2차원 배열

    int[][] arr2 = new int[3][4]

    arr2[행][열]

    arr[0][0] arr[0][1] arr[0][2] arr[0][3]
    arr[1][0] arr[1][1] arr[1][2] arr[1][3]
    arr[2][0] arr[2][1] arr[2][2] arr[2][3]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        // 2차원 배열
        public static void p1() {
            int[][] mArray = { { 1234 }, { 5678 }, { 9101112 } };
     
            // mArray 2번째열 2번째행의 값을 출력하세요.
            System.out.println(mArray[1][1]);
            System.out.println();
            System.out.println("2차원 배열의 길이" + mArray.length);
            System.out.println("2차원 배열의 길이" + mArray[0].length);
            System.out.println("2차원 배열의 길이" + mArray[1].length);
            System.out.println("2차원 배열의 길이" + mArray[2].length);
     
            // 행의 개수
            for (int row = 0; row < mArray.length; row++) {
                //열의 개수
                for (int col = 0; col < mArray[row].length; col++) {
                    System.out.print(mArray[row][col] + " ");
                }
                System.out.println();
            }
        }
    cs

    mArray = { {1행1열,1행2열,1행3열 } {2행1열,2행2열,2행3열 } {3행1열,3행2열,3행3열 } }

    mArray.length =행의 갯수

    mArray[0].length = 열의 갯수

    2차원 배열은 중첩반복문으로 확인 및 출력할 수 있다.


    비정방형 배열

    arr[0][0] x x
    arr[1][0] arr[1][1] x
    arr[2][0] arr[2][1] arr[2][2]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        // 2차원 배열(비정방향) : irregular multiArray
        public static void p2() {
            int[][] mArray = new int[3][];// 행은 꼭 써야 함, 열은 생략 가능
    //        mArray[0] = {1,2,3}; 오류남
            mArray[0= new int[] { 1 }; // new int[] 를 꼭 써서 대입 값 넣기.
            mArray[1= new int[] { 23 };
            mArray[2= new int[] { 456 };
     
            System.out.println(mArray[0].length);
            System.out.println(mArray[1].length);
            System.out.println(mArray[2].length);
            System.out.println();
     
            // 행의 개수
            for (int row = 0; row < mArray.length; row++) {
                // 열의 개수
                for (int col = 0; col < mArray[row].length; col++) {
                    System.out.print(mArray[row][col] + " ");
                }
                System.out.println();
            }
        }
    cs

    int[][] mArray = new int[3][];// 행은 꼭 써야 함, 열은 생략 가능

    // mArray[0] = {1,2,3}; 오류남

    mArray[0] = new int[] { 1 }; // new int[] 를 꼭 써서 대입 값 넣기.

    마찬가지로 중첩반복문으로 확인 및 출력 가능

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
        // 아파트 각층에 1호, 2호 : 10층
        // 각 층의 가족 수를 담을 10층 건물 배열 만들고
        // 각 층의 가족 수 합계, 아파트 전체의 가족 수의 합계 출력
        public static void p3() {
            int[][] aArray = { { 22 }, { 45 }, { 25 }, { 65 }, { 34 }, { 43 }, { 25 }, { 54 }, { 43 },
                    { 33 } };
            int rowTotal = 0;
            int total = 0;
     
            for (int i = 0; i < aArray.length; i++) {
                for (int j = 0; j < aArray[i].length; j++) {
                    rowTotal += aArray[i][j];
                    total += aArray[i][j];
                }
                System.out.print((i + 1+ "층의 가족수 합계: " + rowTotal);
                System.out.println();
                rowTotal = 0;
            }
            System.out.println("해당 아파트의 총 가족수 합계: " + total);
     
        }
    cs

    배열의 복사

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
        // 배열의 복사 방법 1,2,3
        public static void p4() {
            int[] arr1 = { 1020304050 };
     
            // 방법1 : 반복문 사용
            int[] arr2;
            arr2 = new int[8];
     
            for (int i = 0; i < arr1.length; i++) {
                arr2[i] = arr1[i];
            }
     
            for (int i : arr2) {
                System.out.print(i + "  ");
            }
            System.out.println();
            System.out.println("===========================");
     
            // 방법2 : System.arraycopy(arr1, 0, arr3, 0, 0);
            // System.arraycopy(복사해올 배열, 복사 시작 자리, 복사해놓을 배열, 복사 해놓는 자리, 복사 갯수);
            int[] arr3 = new int[8];
     
            System.arraycopy(arr1, 1, arr3, 02);
     
            for (int i : arr3) {
                System.out.print(i + "  ");
            }
            System.out.println();
            System.out.println("===========================");
     
            // 방법3 : Arrays.copyOf(null, 0)
            // Arrays 에 있는 copyOf라는 메서드
            // Arrays.copyOf(복사할 배열, 복사 갯수)
            int[] arr4 = null;
     
            arr4 = Arrays.copyOf(arr1, 5);
     
            for (int i : arr4) {
                System.out.print(i + "  ");
            }
     
        }
     
        // 중첩 향상된 for문
        public static void p5() {
            int[][] mArray = { { 22 }, { 45 }, { 25 }, { 65 }, { 34 }, { 43 }, { 25 }, { 54 }, { 43 },
                    { 33 } };
     
            // 행의 개수 각행 mArray[]
            for (int[] row : mArray) {
                for (int col : row) {
                    System.out.println(col + "/t"); //거꾸로 슬래시 뭐지..
                }
                System.out.println();
            }
        }
    cs

    3차원 배열

    int[][][] tMArray = new int[3][3][3];

    tMArray[높이][행][열];

    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
        // 3차원 배열
        public static void p6() {
            int[][][] tMArray = new int[4][3][2];
            int value = 0;
     
            // tMArray.length 높이 길이
            // tMArray[].length 행 길이
            // tMArray[][].length 열 길이
            for (int h = 0; h < tMArray.length; h++) {
                for (int r = 0; r < tMArray[h].length; r++) {
                    for (int c = 0; c < tMArray[h][r].length; c++) {
                        tMArray[h][r][c] = ++value;
                    }
                }
            }
     
            for (int h = 0; h < tMArray.length; h++) {
                for (int r = 0; r < tMArray[h].length; r++) {
                    for (int c = 0; c < tMArray[h][r].length; c++) {
                        System.out.print(tMArray[h][r][c] + "t");
     
                        System.out.print("   ");
                    }
                    System.out.println();
                }
            }
        }
    cs

     


    로또번호 생성기 1~45

    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
        public static void p7() {
            // 난수 만들기
            // int randomNo = Math.random();
     
            // ramdom은 소수점으로 나온다. 0~1 사이의 수이니 * 45를 하면됨
            // 하지만 정확히 1은 없으니 45가 나올려면 +1 을 해줘야 헤준다.
     
            int randomNo = (int) (Math.random() * 45+ 1;
            int[] lotto = new int[6];
     
            // 반복문 사용하여 lotto번호 채우기(단, 중복은 안됨)
            for (int i = 0; i < 6;) {
                boolean isDup = false;// 중복여부
     
                randomNo = (int) (Math.random() * 45+ 1;
     
                for (int j = 0; j < lotto.length; j++) {
                    if (lotto[j] == randomNo) {
                        isDup = true;
                        System.out.println(isDup);
                        break;
                    }
                }
                if (isDup == false) {
                    lotto[i] = randomNo;
                    i++;
                }
     
            }
            for (int no : lotto) {
                System.out.print(no + "  ");
            }
        }
    cs

    'JAVA' 카테고리의 다른 글

    static main, 접근제한자, 싱글톤정의  (0) 2021.07.22
    java 및 객체의 정의  (0) 2021.07.22
    클래스,메서드정의  (0) 2021.07.21
    배열,while,for문  (0) 2021.07.21
    [java] 변수,변수형,연산자,if문  (0) 2021.07.21

    댓글

Designed by Tistory.