array

배열의 선언

package chapter06;

public class ArrEx {

    public static void main(String[] args) {

        int[] arrInt;
        int arrInt2[];

        double[] arrDouble;
        String[] arrString;


    }

}

배열 생성

배열의 인덱스

score score[0] score[1] score[2] score[3] score[4]
0x100 0 0 0 0 0
package chapter06;

public class ArrEx3 {

    public static void main(String[] args) {

        int[] arrInt = new int[5]; // 길이가 5개인 배열 객체 생성

        arrInt[0] = 1;
        arrInt[1] = 2;
        arrInt[2] = 3;
        arrInt[3] = 4;
        arrInt[4] = 5;
    }
}

배열의 초기화

package chapter06;

public class ArrEx5 {

    public static void main(String[] args) {

        String[] arrStr = {"홍길동", "이순신", "김유신"};


    }

}

배열의 길이

package chapter06;

public class ArrEx6 {

    public static void main(String[] args) {

        String[] arrStr = {"홍길동", "이순신", "김유신"};

        System.out.println("배열의 길이 : "+arrStr.length);

    }

}

배열과 반복문 입/출력

반복문으로 출력

package chapter06;

public class ArrEx7 {

    public static void main(String[] args) {

        String[] arrStr = {"홍길동", "이순신", "김유신"};

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

    }

}

반복문으로 입/출력

package chapter06;

public class ArrEx8 {

    public static void main(String[] args) {

        int[] number = new int[100];

        // 배열 변수에 입력
        for (int i=0; i<number.length; i++) {
            number[i] = i+1;
        }

        // 배열 변수 출력
        for (int i=0; i<number.length; i++) {
            System.out.println(number[i]);
        }

    }

}

반복문, 조건문 활용

package chapter06;

import java.util.Arrays;

public class ArrayLoopTest {

    public static void main(String[] args) {

        // 1 ~ 100 사이의 값의 합, 짝수의 합, 홀수의 합, 3의 배수의 합을 구하시오.

        // data 준비 초기화
        int[] data = new int[100];
        for(int i=0; i<data.length; i++) {
            data[i] = i+1; 
        }

        // data 확인
        System.out.println("data="+Arrays.toString(data));

        // 합 구하기
        int sum = 0;
        for(int i=0; i<data.length; i++) {
            sum = sum + data[i];
        }

        // sum 확인
        System.out.println("sum="+sum);

        // 홀짝합 구하기
        int triSum = 0;
        int evenSum = 0;
        int oddSum = 0;
        for(int i=0;i<data.length;i++) {
            if(data[i]%3 == 0) {
                triSum = triSum + data[i];
            }
            if(data[i]%2 == 0) {
                evenSum = evenSum + data[i];
            }else {
                oddSum += data[i];
            }
        }

        // sum 확인
        System.out.println("sum="+sum);
        System.out.println("triSum="+triSum);
        System.out.println("evenSum="+evenSum);
        System.out.println("oddSum="+oddSum);
    }

}

index 없는 반복문 출력

package chapter06;

import java.util.Arrays;

public class ArrayTest1 {

    public static void main(String[] args) {

        String[] arrStr = {"홍길동", "이순신", "김유신"};

        // index, lenght 사용
        for (int i=0; i<arrStr.length; i++) {
            System.out.println(arrStr[i]);
        }

        // index 미사용
        for (String str : arrStr) {
            System.out.println("str = " + str );
        }

        int[] nums = new int[5];

        // 배열 변수에 입력
        for (int i=0; i<nums.length; i++) {
            nums[i] = i+1;
        }

        // index, lenght 사용
        for (int i=0; i<nums.length; i++) {
            System.out.println(nums[i]);
        }

        // index 미사용
        for (int num : nums ) {
            System.out.println("num=" + num);
        }


    }

}

main(String agrs[])

package chapter06;

public class ArrEx9 {

    public static void main(String[] args) {

        System.out.println("첫번째 값 : "+args[0]);
        System.out.println("두번째 값 : "+args[1]);

    }

}

로또번호 만들기

1. 중복값 모든 값 비교
package chapter06;

import java.util.Arrays;

public class LottoOne {

    public static void main(String[] args) {
        int[] lottOne = new int[6];

        while(true) {
            for(int i=0;i<lottOne.length;i++) {
                lottOne[i] = (int)(Math.random()*45) + 1;
            }
            int[] l = lottOne;
            boolean b1 = l[0]==l[1] || l[0]==l[2] || l[0]==l[3] || l[0]==l[4] || l[0]==l[5];
            boolean b2 = l[1]==l[2] || l[1]==l[3] || l[1]==l[4] || l[1]==l[5];
            boolean b3 = l[2]==l[3] || l[2]==l[4] || l[2]==l[5];
            boolean b4 = l[3]==l[4] || l[3]==l[5];
            boolean b5 = l[4]==l[5];
            boolean insert = b1 || b2 || b3 || b4 || b5;

            if(!insert) { // 중복이 없다면
                break;
            }           
        }
        System.out.println(Arrays.toString(lottOne));
    }
}
2. 중복값 모든 값 반복문 비교
package chapter06;

import java.util.Arrays;

public class LottoOne2 {

    public static void main(String[] args) {
        int[] lottOne = new int[6];

        while(true) {
            for(int i=0;i<lottOne.length;i++) {
                lottOne[i] = (int)(Math.random()*45) + 1;
            }
            boolean insert = true;
            for(int i=0;i<6;i++) {
                for(int j=0;j<6;j++) {
                    if(i != j) {
                        if(lottOne[i] == lottOne[j]) {
                            insert = false; // 중복이 있어
                        }
                    }
                }
            }
            if(insert) { // 중복이 없다면
                break;
            }           
        }
        System.out.println(Arrays.toString(lottOne));
    }
}
3. 중복값 확인 후 값 입력
package chapter06;

import java.util.Arrays;

public class LottoOne3 {

    public static void main(String[] args) {
        int[] lottoOne = new int[6]; //{25,0,0,0,0,0}
        int idx = 0; // 배열 위치 

        while(true) {
            boolean insert = true;
            int number = (int)(Math.random()*45) + 1;//25
            // 중복 값 체크
            for(int i=0;i<=idx;i++) {
                if(lottoOne[i] == number) { // 중복 있으면
                    insert = false; // 넣지마라
                }           
            }
            if(insert == true) { // 넣어라
                lottoOne[idx] = number;
                idx++;
            }
            if(idx == 6) break;
        }
        System.out.println(Arrays.toString(lottoOne));
    }
}

배열변수 : 참조형변수

package chapter06;

import java.util.Arrays;

public class ArrayVarTest {

    public static void main(String[] args) {

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

        System.out.println(arr1.toString());
        System.out.println(arr2.toString());
        System.out.println("arr1="+Arrays.toString(arr1));
        System.out.println("arr2="+Arrays.toString(arr2));

        arr1[0] = 100;
        arr2[4] = 500;

        System.out.println("arr1="+Arrays.toString(arr1));
        System.out.println("arr2="+Arrays.toString(arr2));

    }

}

함수에서 배열

package chapter06;

import java.util.Arrays;

public class ArrArgs {

    // 여러개의 값 리턴 효과
    public static int[] arrReturn() {
        int[] arr = {0,2,4};
        return arr;
    }

    // 참조 변수
    public static void arr2XRef(int[] arr) {
        for(int i=0; i<arr.length; i++) {
            arr[i] = arr[i] * 2; 
        }
    }

    // 새로운 배열 리턴
    public static int[] arr2XNew(int[] arr) {
        int[] arrNew = new int[arr.length];
        for(int i=0; i<arr.length; i++) {
            arrNew[i] = arr[i] * 2; 
        }

        return arrNew;
    }


    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5};
        System.out.println("arr=" + Arrays.toString(arr));

        arr2XRef(arr);
        System.out.println("arrRef(arr)=" + Arrays.toString(arr));

        int[] arrNew = arr2XNew(arr);
        System.out.println("arr2XNew(arr)=" + Arrays.toString(arrNew));


    }

}

배열의 복사 - 배열 길이 늘리기

package chapter06;

import java.util.Arrays;

public class ArrayCopyTest {

    public static void main(String[] args) {

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

        // 배열 늘리기 - 기존 값 복사  
        int[] arr2 = new int[10];
        for(int i = 0;i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }

        System.out.println("arr2="+Arrays.toString(arr2));

        // 배열 늘리기 - System 클래스 arraycopy() 메소드 사용
        int[] arr3 = new int[10];
        System.arraycopy(arr2, 0, arr3, 0, arr1.length);
        System.out.println("arr3="+Arrays.toString(arr3));

        // 배열 늘리기 - Arrays 클래스 copyOf() 메소드 사용      
        int[] arr4 = null;
        arr4 = Arrays.copyOf(arr1, arr1.length+5);
        System.out.println("arr4="+Arrays.toString(arr4));

    }

}

다차원 배열

선언 방법 선언 예
타입[][] 변수이름 int [][] score
타입 변수이름[][] int score[][]
타입[] 변수이름[] int[] score[]
이미지참조: https://hunit.tistory.com/164

2차원 배열의 선언 및 초기화

package chapter06;

public class ArrEx10 {

    public static void main(String[] args) {

        // 첫번째
        int[][] matrix = new int[3][3];

        matrix[0][0] = 1;
        matrix[0][1] = 2;
        matrix[0][2] = 3;
        matrix[1][0] = 4;
        matrix[1][1] = 5;
        matrix[1][2] = 6;
        matrix[2][0] = 7;
        matrix[2][1] = 8;
        matrix[2][2] = 9;

        // 두번째
        int[][] matrix2 = {{1,2,3}, {4,5,6}, {7,8,9}};

        // 세번째
        int[][] matrix3 = {
                {1,2,3}, 
                {4,5,6}, 
                {7,8,9}
        };

        System.out.println("[첫번째]");
        for (int i=0; i<matrix.length; i++) {
            for (int j=0; j<matrix[i].length; j++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("[두번째]");
        for (int i=0; i<matrix2.length; i++) {
            for (int j=0; j<matrix2[i].length; j++) {
                System.out.print(matrix2[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("[세번째]");
        for (int i=0; i<matrix3.length; i++) {
            for (int j=0; j<matrix3[i].length; j++) {
                System.out.print(matrix3[i][j]+" ");
            }
            System.out.println();
        }


    }

}
package chapter06;

public class ArrEx12 {

    public static void main(String[] args) {
        // 두번째 인덱스 생략 가능
        int[][] arrInt = new int[3][];

        arrInt[0] = new int[] {1};
        arrInt[1] = new int[] {2,3};
        arrInt[2] = new int[] {4,5,6};

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


    }

}

3차원 배열

package chapter06;

public class ArrEx11 {

    public static void main(String[] args) {

        int[][][] arrInt = new int[3][3][3];

        int value = 0;
        // 값 대입
        for (int i=0; i<=2; i++) {
            for (int j=0; j<=2; j++) {
                for (int k=0; k<=2; k++) {
                    arrInt[i][j][k] = value++; 
                }
            }
        }

        // 값 출력
        for (int i=0; i<=2; i++) {
            for (int j=0; j<=2; j++) {
                for (int k=0; k<=2; k++) {
                    System.out.print(arrInt[i][j][k]+"\t"); 
                }
                System.out.println();
            }
        }


    }

}

배열 활용 예제

총합과 평균

class ArrayTest01 {
    public static void main(String[] args) {
        int sum =0;             // 총점을 저장하기 위한 변수
        float average = 0f;     // 평균을 저장하기 위한 변수

        int[] score = {100, 88, 100, 100, 90};

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

        average = sum / (float)score.length ; // 계산결과를 float로 얻기 위함.

        System.out.println("총점 : " + sum);
        System.out.println("평균 : " + average);
    }
}

최대값과 최소값

class ArrayTest02{ 
    public static void main(String[] args) { 
        int[] score = { 79, 88, 91, 33, 100, 55, 95}; 

        int max = score[0]; // 배열의 첫 번째 값으로 최대값을 초기화 한다. 
        int min = score[0]; // 배열의 첫 번째 값으로 최소값을 초기화 한다. 

        for(int i=1; i < score.length;i++) {
            if(score[i] > max) { 
                max = score[i]; 
            } else if(score[i] < min) { 
                min = score[i]; 
            } 
        } // end of for 

        System.out.println("최대값 :" + max);       
        System.out.println("최소값 :" + min);       
    } // end of main 
} // end of class 

배열 값 섞기(shuffle)

class Lotto5 {
    public static void main(String[] args) {
        int[] numArr = new int[10];

        for (int i=0; i < numArr.length ; i++ ) {
             numArr[i] = i;  // 배열을 0~9의 숫자로 초기화한다.
            System.out.print(numArr[i]);  
        }
        System.out.println();

        for (int i=0; i < 100; i++ ) {
            int n = (int)(Math.random() * 10);  // 0~9중의 한 값을 임의로 얻는다.

            int tmp = numArr[0];
            numArr[0] = numArr[n];
            numArr[n] = tmp;
        }

        for (int i=0; i < numArr.length ; i++ )
            System.out.print(numArr[i]);        
    } // main의 끝
}

로또번호 1장 뽑기

package chapter06;

import java.util.Arrays;

public class LottoOne {

    public static void main(String[] args) {
        int[] lottoBall = new int[45];

        for (int i=0; i < lottoBall.length ; i++ ) {
            lottoBall[i] = i+1;  // 배열을 1~45의 숫자로 초기화한다.
        }
        // 값 확인
        System.out.println(Arrays.toString(lottoBall));

        // 값 섞기
        for (int i=0; i < 777; i++ ) {
            int n = (int)(Math.random() * 45);  // 0~44중의 한 값을 임의로 얻는다.

            int tmp = lottoBall[0];
            lottoBall[0] = lottoBall[n];
            lottoBall[n] = tmp;
        }
        // 값 확인
        System.out.println(Arrays.toString(lottoBall));

        // 1장 뽑기
        int[] lotto1 = new int[6]; 
        for (int i=0; i < lotto1.length ; i++ ) {
            lotto1[i] = lottoBall[i];      
        }
        // 값 확인
        System.out.println(Arrays.toString(lotto1));


}

로뽀 번호 5장 뽑기

package chapter06;

import java.util.Arrays;

public class LottoFive {

    public static int[] getLottoOne() {
        int[] lottoBall = new int[45];

        for (int i=0; i < lottoBall.length ; i++ ) {
            lottoBall[i] = i+1;  // 배열을 1~45의 숫자로 초기화한다.
        }
        // 값 확인
        System.out.println(Arrays.toString(lottoBall));

        // 값 섞기
        for (int i=0; i < 777; i++ ) {
            int n = (int)(Math.random() * 45);  // 0~44중의 한 값을 임의로 얻는다.

            int tmp = lottoBall[0];
            lottoBall[0] = lottoBall[n];
            lottoBall[n] = tmp;
        }
        // 값 확인
        System.out.println(Arrays.toString(lottoBall));

        // 1장 뽑기
        int[] lotto1 = new int[6]; 
        for (int i=0; i < lotto1.length ; i++ ) {
            lotto1[i] = lottoBall[i];      
        }

        // 값 확인
        System.out.println(Arrays.toString(lotto1));

        return lotto1;
    }

    public static void main(String[] args) {

        // 5장 뽑기
        int[][] lotto5 = new int[5][6];


        // 5장 확인
        for(int i=0;i<lotto5.length;i++) {
            lotto5[i] = getLottoOne();          
        }
        System.out.println("=============== LOTTO ===============");
        // 5장 출력
        for(int i=0;i<lotto5.length;i++) {
            System.out.println(Arrays.toString(lotto5[i]));     
        }



    }

}

정렬(버블 정렬)

class ArrayTest03 {
    public static void main(String[] args) {
        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; // 자리바꿈이 발생했으니 changed를 true로.
                }
            } // end for j

            if (!changed) break;    // 자리바꿈이 없으면 반복문을 벗어난다.주석 후 확인

            for(int k=0; k<numArr.length;k++)
                System.out.print(numArr[k]); // 정렬된 결과를 출력한다.
            System.out.println();
        } // end for i
    } // main의 끝
}

단어맞추기

import java.util.*;

class  MultiArrEx4{
    public static void main(String[] args) {
        String[][] words = {
            {"chair","의자"},         // words[0][0], words[0][1]
            {"computer","컴퓨터"}, // words[1][0], words[1][1]
            {"integer","정수"}        // words[2][0], words[2][1]
        };

        Scanner scanner = new Scanner(System.in);

        for(int i=0;i<words.length;i++) {
            System.out.printf("Q%d. %s의 뜻은?", i+1, words[i][0]);

            String tmp = scanner.nextLine();

            if(tmp.equals(words[i][1])) {
                System.out.printf("정답입니다.%n%n");
            } else {
               System.out.printf("틀렸습니다. 정답은 %s입니다.%n%n",words[i][1]);
            }
        } // for
    } // main의 끝
}

야구게임 배열소스 적용

package chapter06;

import java.util.Scanner;

public class BaseBallArr {

    // 배열사용
    // getbBalls()메서드 생성  중복되지 않는 3개의 값을 리터하는 함수로변경

    public static boolean isCheck(int[] n) {
        boolean check = n[0] == n[1] || n[0] == n[2] || n[1] == n[2];
        return check;
    }

    public static int[] getBalls() {
        int[] balls = new int[3];

        while(true) {
            System.out.println("숫자를 선택 중....");
            for(int i=0;i<balls.length;i++) {
                balls[i] = (int)(Math.random()*9) + 1;// 1~9
            }
            // 중복 값 제거
            boolean check = isCheck(balls);
            if(!check) {
                System.out.println("숫자를 선택 완료!!");
                break;
            }

        }
        return balls;
    }

    public static void main(String[] args) {
        int[] com = new int[3];
        int[] user= new int[3];
        int b = 0, s = 0, o = 0;
        int count = 0;

//      while(true) {
//          for(int i=0;i<com.length;i++) {
//              com[i] = (int)(Math.random()*9) + 1;// 1~9
//          }
//          // 중복 값 제거
//          boolean check = isCheck(com);
//          if(!check) {
//              break;
//          }
//      }

        com = getBalls();

        System.out.printf("%s%s%s\n", com[0],com[1],com[2]);

        Scanner scanner = new Scanner(System.in);

        while(true) {
            count = count + 1;//1
            b = 0;
            s = 0;
            o = 0;

            while(true) {
                System.out.println("3 자리(공백구분)>>");
                user[0] = scanner.nextInt();
                user[1] = scanner.nextInt();
                user[2] = scanner.nextInt();
                // 중복 값 제거
                boolean check = isCheck(user);
                if(!check) {
                    break;
                }
            }

            for(int i=0;i<user.length;i++) {
                for(int j=0;j<com.length;j++) {
                    if(user[i]==com[j]) {
                        if(i==j) {
                            s++;
                        }else {
                            b++;
                        }
                    }
                }
            }

            o = 3 - (s + b);

            System.out.printf("%sS %sB %sO\n",s,b,o);

            if(s==3) {
                break;
            }
        }

        System.out.println(count + "번만에 빙고~~");

    }

}