자바의 정석 배열

배열

 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

 

배열의 선언과 생성

배열의 선언 - 배열을 다루기 위한 참조변수 선언

 

1. 타입[] 변수이름

 - Int[] score;

 - score = new int[5];

 

2. 타입 변수이름[]

 

배열의 인덱스

각 요소에 자동으로 붙는 번호

"인덱스(Index)의 범위는 0부터 배열길이-1"까지

public class Ex5_1_tmp {
    public static void main(String[] args) {
//        int[] score; 1. 배열 score를 선언(참조변수)
//        score = new int[5]; 2. 배열의 생성(int저장공간 x 5)
        
        int [] score = new int[5]; // 배열의 선언과 생성을 동시에
        score[3] =100;
        
    }

배열의 길이

"배열은 한번 생성하면 그 길이를 바꿀 수 없다."

 

배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것

 

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

 

배열의 출력

char[] ChArr 

 

캐릭터 배여일 때만 출력 가능

 

// 배열의 요소를 순서대로 하나씩 출력

for( int i=0; i<Arr.length; i++){

System.out.println(Arr[i]);}

 

//배열의 모든 요소를 출력

System.out.println(Arrays.toString(Arr));

 

 

배열의 활용

총점과 평균 구하기

public class Ex5_2 {
    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 /score.length; //계산결과를 Float으로 얻기

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

 

최대값과 최소값

 

public class Ex5_3 {
    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];
            }
        }
        System.out.println("최대값 :"+max);
        System.out.println("최소값 :"+min);
    }
}

 

섞기(Shuffle)

import java.util.Arrays;

public class Ex5_4 {
    public static void main(String[] args) {
        int[] numArr = {0,1,2,3,4,5,6,7,8,9};
        System.out.println(Arrays.toString(numArr));

        for (int i =0; i<100; i++){
            int n = (int)(Math.random()*10);
            int tmp = numArr[0];
            numArr[0] = numArr[n];
            numArr[n] =tmp;
        }
        System.out.println(Arrays.toString(numArr));
    }
}

 

로또 번호 

import java.util.Arrays;

public class Ex5_5 {
    public static void main(String[] args) {
        int[] ball = new int[45]; //45개 정수값을 저장하기

        //배열의 각 요소에 1~45값을 저장
        for(int i=0; i<ball.length; i++){
            ball[i]=i+1; // ball[0]에 1이 저장된다.인덱스는 0부터 시작하니까
        }
        System.out.println(Arrays.toString(ball));
        int tmp =0; // 두 값을 바꾸는데 사용할 임시변수
        int j =0; // 임의의 값을 얻어서 저장할 변수

        // 배열의 i번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 저장
        // 0번째부터 5번째 요소까지 모두 6개만 바꾼다.
        for (int i=0; i<6; i++){
            j=(int)(Math.random()*45); //0~44범위 임의의 수
            tmp =ball[i];
            ball[i] = ball[j];
            ball[j] = tmp;
            System.out.println(Arrays.toString(ball));
        }
        //배열 ball의 앞에서부터 6개의 요소를 출력한다.
        for(int i=0; i<6; i++){
            System.out.printf("ball[%d]=%d%n", i, ball[i]);
        }

    }
}

결과

[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]
[12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 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]
[12, 7, 3, 4, 5, 6, 2, 8, 9, 10, 11, 1, 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]
[12, 7, 28, 4, 5, 6, 2, 8, 9, 10, 11, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
[12, 7, 28, 24, 5, 6, 2, 8, 9, 10, 11, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 4, 25, 26, 27, 3, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
[12, 7, 28, 24, 27, 6, 2, 8, 9, 10, 11, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 4, 25, 26, 5, 3, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
[12, 7, 28, 24, 6, 27, 2, 8, 9, 10, 11, 1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 4, 25, 26, 5, 3, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
ball[0]=12
ball[1]=7
ball[2]=28
ball[3]=24
ball[4]=6
ball[5]=27

Process finished with exit code 0

 

 

String 배열의 선언과 생성

String 클래스

1. String클래스는 char[] 와 메서드(기능)를 결합한 것

   String클래스 = char[] + 메서드(기능)

 

2. String 클래스는 내용을 변경할 수 없다. (read only)

 

String클래스의 주요 메서드

char charAt(int index) : 문자열에서 해당위치(index)에 있는 문자를 반환한다.

int length() : 문자열의 길이를 반환한다

String substring (in from, int to) : 문자열에서 해당 범위(from~to)의 문자열을 반환한다 (to 는 포함 안됨)

boolean equals(Object obj): 문자열의 내용이 같은지 확인한다.

char[] toCharArray(): 문자열을 문자배열로 변환해서 반환

 

 

커맨드 라인을 통해 입력받기

public class Ex5_7 {
    public static void main(String[] args) {
        System.out.println("매개변수의 개수:"+args.length);
        for(int i=0; i< args.length;i++){
            System.out.println("args["+i+"] = \""+ args[i] +"\"");
        }
    }
}

run configuration

run configuration의 arguments를 수정해주면,,,,

 

 

2차원 배열

테이블 형태의 데이터를 저장하기 위한 배열

 

int[][] score = new int[4][3]; //4행 3열의 2차원 배열 score

2차원 배열의 인덱스

2차원 배열의 초기화

int[][] arr = {

                        {1,2,3}

                        {4,5,6}

                     };

 

 

2차원 배열 예제

class Ex5_8 {
   public static void main(String[] args) {
      int[][] score = {
              { 100, 100, 100 }
            , { 20, 20, 20 }
            , { 30, 30, 30 }
            , { 40, 40, 40 }
      };
      int sum = 0;

      for (int i = 0; i < score.length; i++) {
         for (int j = 0; j < score[i].length; j++) {
            System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);

            sum += score[i][j];
         }
      }

      System.out.println("sum=" + sum);
   }
}
class Ex5_9 {
    public static void main(String[] args) {
        int[][] score = {
                { 100, 100, 100}
                , { 20, 20, 20}
                , { 30, 30, 30}
                , { 40, 40, 40}
                , { 50, 50, 50}
        };
        // 과목별 총점
        int korTotal = 0, engTotal = 0, mathTotal = 0;

        System.out.println("번호 국어 영어 수학 총점 평균");
        System.out.println("=============================");

        for(int i=0;i < score.length;i++) {
            int  sum = 0;      // 개인별 총점
            float avg = 0.0f;  // 개인별 평균

            korTotal  += score[i][0];
            engTotal  += score[i][1];
            mathTotal += score[i][2];
            System.out.printf("%3d", i+1);

            for(int j=0;j < score[i].length;j++) {
                sum += score[i][j];
                System.out.printf("%5d", score[i][j]);
            }

            avg = sum/(float)score[i].length;  // 평균
            System.out.printf("%5d %5.1f%n", sum, avg);
        }

        System.out.println("=============================");
        System.out.printf("총점:%3d %4d %4d%n", korTotal, engTotal, mathTotal);
    }
}
import java.util.Scanner;

class Ex5_10{
    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");//%n은 개행
            } else {
                System.out.printf("틀렸습니다. 정답은 %s입니다.%n%n",words[i][1]);
            }
        } // for
    } // main의 끝
}

 

Arrays로 배열 다루기

문자열의 비교와 출력 - equals(), toString()

 

Arrays.toString(arr); 1차원 배열

Arrays.deepToString(arr2D); 2차원 배열

 

Arrays.equlas(arr1, arr2); 1차원배열 비교

Arrays.deepEquals(arr1, arr2); 2차원 이상 배열 비교

 

배열의 복사 - copyOf(), copyOfRange()

 

배열의 정렬 - sort()

 

Arrays.sort(arr); // 오름차순으로정렬

 

 

 

 

 

+ Recent posts