본문 바로가기
JAVA

[자바/JAVA] - 배열(array), 2차원 배열

by wook99 2024. 3. 24.

배열(array)은 정말 자주 쓰이는 자료형이다.

배열은 하나의 블록안에 여러 데이터들을 모아 집합시켜 저장함으로써 데이터를 구조적으로 다루는데 도와준다. 

 

같은 타입의 변수를 반복해서 선언하고 반복해서 사용하는 문제를 배열을 통해서 해결할 수 있다.

 

1.배열 변수 선언

  • 배열을 사용하려면 int[] students; 와 같이 배열 변수를 선언해야함.
  • 변수 선언을 한다고 사용할 수 있는 배열이 만들어진게 아님.

2.배열 생성

  • students = new int[5];와 같이 배열을 생성한다.
  • 선언과 생성을 동시에 할 수도 있다. ex) int[] students = new int[5];

3.배열의 초기화

  • int[] students = new int[5]; 로 만든 배열에는 총 5개의 int형 변수가 만들어지고, 내부값을 자바에서 자동으로 초기화한다. 숫자는 0, boolean은 false, String은 null로 초기화 된다.
public static void main(String[] args) {
        int[] students;     //배열 변수 선언
        students = new int[]{90,80,70,60,50,40,30,20,10,0};  //배열 생성과 초기화 동시에
		//= int[] students = new int[]{90,80,70,60,50,40,30,20,10,0};
        
        for (int i = 0; i < students.length; i++) {
            System.out.println("학생" + (i+1) + " 점수 : " + students[i]);
        }
    }
    
/*
    실행결과
    학생1 점수 : 90
    학생2 점수 : 80
    학생3 점수 : 70
    학생4 점수 : 60
    학생5 점수 : 50
    학생6 점수 : 40
    학생7 점수 : 30
    학생8 점수 : 20
    학생9 점수 : 10
    학생10 점수 : 0
*/

 

4. 배열의 참조값

public static void main(String[] args) {
    int[] students;   
    students = new int[]{90,80,70,60,50,40,30,20,10,0}; 

    System.out.println(students);
}

/*
실행결과 : [I@723279cf	
*/

 

배열의 값을 얻으려면 students라는 배열의 변수로 직접접근을 하면 안되고,  students[0] 이런식으로 값을 꺼내서 써야한다.

그 이유는 students라는 배열 변수에는 배열의 참조값이 들어가기 때문인데, 참조값이란 배열이 있는 주소(메모리 주소)라고 생각하면 된다.

 

5. 반복문을 통한 배열의 초기화와 출력

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("입력받을 숫자의 개수를 입력하세요");
    int count = scanner.nextInt();

    int[] arr = new int[count];
    int total = 0;
    double average;

    System.out.println(count + "개의 숫자를 입력하세요 : ");
    for (int i = 0; i < count; i++) {
        arr[i] = scanner.nextInt();
        total += arr[i];
    }

    System.out.println("입력한 숫자 목록");
    for (int i = 0; i < count; i++) {
        System.out.println(arr[i]);
    }

    average = total / count;
    System.out.println("입력한 정수의 합계 : " + total);
    System.out.println("입력한 정수의 평균 : " + average);
}

/*
실행결과
    입력받을 숫자의 개수를 입력하세요
    5
    5개의 숫자를 입력하세요 : 
    1
    2
    3
    4
    5
    입력한 숫자 목록
    1
    2
    3
    4
    5
    입력한 정수의 합계 : 15
    입력한 정수의 평균 : 3.0
*/

 

사용자가 입력받을 수의 개수를 정하고,그 개수만큼 배열을 생성한다음 그 숫자를 배열 각인덱스에 할당해서 출력 후 합계와 평균까지 구하는 예제이다.


6. 2차원 배열

위에 설명한 배열들은 1차원 배열이고, 2차원 배열은 말그대로 하나의 차원이 추가된 배열이다.

행과 열로 구성되며 중첩 for문과 시너지가 좋다.

 

1) 배열 변수 선언

  • 배열을 사용하려면 int[][] students; 와 같이 배열 변수를 선언해야함.
  • 변수 선언을 한다고 사용할 수 있는 배열이 만들어진게 아님.

2) 배열 생성

  • students = new int[5][3];와 같이 배열을 생성한다.
  • 선언과 생성을 동시에 할 수도 있다. ex) int[] students = new int[5][3];
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("학생수를 입력하세요 : ");
    int studentCount = scanner.nextInt();

    int[][] scores = new int[studentCount][3];
    String[] subjects = {"국어","영어","수학"};

    for (int i = 0; i < studentCount; i++) {
        System.out.println((i+1) + "번 학생의 성적을 입력하세요.");
        for (int j = 0; j < subjects.length; j++) {
            System.out.print(subjects[j] + " 점수 : ");
            scores[i][j] = scanner.nextInt();
        }
    }

    for (int i = 0; i < studentCount; i++) {
        int total = 0;
        for (int j = 0; j < subjects.length; j++) {
            total += scores[i][j];
        }
        double average = total / 3.0;
        System.out.println((i+1)+"번 학생의 총점 : "+ total + ", 평균 : "+average);
    }
}

/*
실행결과
학생수를 입력하세요 : 3
1번 학생의 성적을 입력하세요.
국어 점수 : 80
영어 점수 : 70
수학 점수 : 90
2번 학생의 성적을 입력하세요.
국어 점수 : 0
영어 점수 : 100
수학 점수 : 100
3번 학생의 성적을 입력하세요.
국어 점수 : 70
영어 점수 : 70
수학 점수 : 70
1번 학생의 총점 : 240, 평균 : 80.0
2번 학생의 총점 : 200, 평균 : 66.66666666666667
3번 학생의 총점 : 210, 평균 : 70.0
*/

 

사용자에게 학생수를 입력받아 배열을 생성하고, 과목별 점수를 입력받아 점수와 총점,평균을 출력하는 예제이다.

 

정리

  • 배열을 선언하기만 하면 사용할 수 없고,  int[] students = new int[5]; 처럼 생성까지 해주어야 사용 가능하다.
  • 배열의 요소의 값을 쓰려면 students라는 배열 변수를 사용하면 안되고 students[0] 이런식으로 사용해야 한다.
  • students라는 배열 변수에는 배열의 참조값이 담겨있다.
  • 기본적으로 자바는 숫자는 0, boolean은 false, String은 null로 각 요소를 초기화해준다.