728x90

배열이란???

같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조이다.

score[인덱스]

 

학원의 학생이 3명일 때, 이 반 학생의 평균을 구하려고 한다.

int [] scores = {88, 100, 93};

int sum = 0;

for(int i=0; i<3; i++){
	sum += scores[i];
}

int avg = sum/3;

이렇게 응용해서 사용이 가능하다.

 

 

 

배열의 특징

1️⃣ 배열은 같은 타입의 데이터만 저장 가능하다.
int 배열은 int값만 저장이 가능하고, String 배열은 String, Double은 Double만 가능한다,,, 만약 다른 타입의 값을 저장하고자 하면 컴파일 에러가 발생을 하게 된다.

2️⃣한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다.

 

 

 

 

1. 배열의 선언

배열이 선언은 2가지 형식으로 가능하다.

//1형식
타입[] 변수;

//2형식
타입 변수[];

 

//형식1의 예시
int[] intArr;
double[] doubleArr;
String[] strArr;

//형식2의 예시
int intArr[];
double doubleArr[];
String strArr[];

배열 변수는 참조변수에 속한다. 그러므로 배열도 객체이므로 힙 영역에 생성되고, 배열 변수는 힙영역의 배열 객체를 참조하게 된다. 참조할 배열 객체가 없다면 배열 변수는 null값으로 초기화가 된다.

타입[] 변수=null;

만약에 배열 변수가 null값을 가진 상태에서 변수[인덱스]로 값을 읽거나 저장하게 되면 NullPointerException이 발생하게 된다. 따라서 반드시 배열을 생성하고 배열 변수가 참조하는 상태에서 값을 저장하거나 읽어야 한다. 

 

 

 

2. 배열 생성

배열 생성 방법은 두가지가 있다. 값 목록을 이용하거나, new 연산자를 사용하는 방식이 있다.

1. 값 목록으로 배열을 생성하는 방법

값의 목록이 존재 한다면 간다하게 배열 객체를 생성할 수 있다.

타입[] 변수 = {값1, 값2, 값3, ...};

 

스택(변수의 주소)

⬇️

변수의 주소

변수[0] 변수[1] 변수[2] 변수[...]
값1 값2 값3 ...
String[] names = {"kitty", "mymelody", "kuromi"};

names[0]="kitty", names[1]=mymelody, names[2]="kuromi"이다. 근데 여기서 names[1]을 mymelody에서 pompompurin으로 바꾸고 싶다면

names[1] = "pompompurin"
//이렇게 대입연산자를 사용하면 된다.

 

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        int[] scores = {88, 97, 100};
        int sum = 0;

        for(int i=0; i<3; i++){
            sum += scores[i];
        }

        System.out.println("점수의 합 : " + sum);
        double avg = sum/3;
        System.out.println("점수의 평균 : " + avg);


    }
}
점수의 합 : 285
점수의 평균 : 95.0

 

⭐️주의할 점)

타입[] 변수;
변수 = {값1, 값2, ...}; //컴파일 에러 발생

배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다!!!!!!

따라서 이 경우에는, new연산자를 사용해서 값 목록을 지정해 주면 된다.

new 연산자 바로 뒤에는 배열 변수 선언에서 사용한 타입[]를 붙여주고, 값을 {}안에 나열하면 된다.

타입[] 변수;
변수 = new 타입[]{값1, 값2,..};
String names = null;
names = new String[] {"kitty", "mymelody", "kuromi");

 

메소드의 매개값이 배열일 경우에도 마찬가지로, new 연산자를 사용해야 한다.

int add(int[] scores){...}

int result = add( {95, 85, 90} ); //컴파일 에러가 발생한다.
int result = add( new int[] {95, 85, 90} );

 

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        int[] scores;
        scores = new int[] {88, 97, 100};
        int sum1 = 0;

        for(int i=0; i<3; i++){
            sum1 += scores[i];
        }

        System.out.println("점수의 합 : " + sum1);

        int sum2 = add(new int[] {88, 97, 100});
        System.out.println("점수의 합 : " + sum2);


    }

  //총합을 계산해서 리턴하는 메소드
    public static int add(int[] scores){
        int sum = 0;
        for (int i=0; i<3; i++){
            sum += scores[i];
        }
        return sum;
    }

}

 

2. new 연산자사용

타입[] 변수 = new 타입[길이];

 

길이 6인 int[] 배열을 생성합니다.

int[] intArr = new int[6];

 

학생 30명의 점수를 입력받기

int[] scores = new int[30];

학생 30명의 이름을 생성하기

String[] names = new String[30];

 

배열이 생성되고 나서 특정 인덱스 이치에 새로운 값을 저장하려면 다음과 같이 대입 연산자를 사용해야한다.

변수[인덱스] = 값;

 

 

 

 

3.배열 길이

배열의 길이란 배열에 저장할 수 있는 전체 항목의 개수를 말한다.

배열 변수.length;

 

int[] intArr = {10, 20, 30, 40};
int num = intArr.length;
//num=4가 된다.

length 필드는 읽기 전용 필드이기 때문에 값을 바꿀 수가 없다.

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        int[] scores;
        scores = new int[] {88, 97, 100};
        int sum = 0;

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

        double avg = sum/ scores.length;
        System.out.println("점수의 합 : " + sum);
        System.out.println("점수의 평균 : " +  avg);
    }

}
점수의 합 : 285
점수의 평균 : 95.0
728x90