본문으로 바로가기

배열

category 프로그래밍/java 2017. 8. 25. 22:16

배열이란?


프로그램 안에서 많은 데이터를 처리하는 경우가 있다. 예를 들어 50명의 학생이 있는 학급의 시험 점수를 다루는 프로그램을 

만든다고 가정할때 


예를 들어 
int test1 = 80;
int test2 = 60;

..

int test50 = 35;


이렇게 50개 변수를  각각 만들어야 하기 때문에 불편하다.


그러나 배열은 같은 형의 값을 동시에 여러개 기억할 수 있기 때문에 편리하다.


배열 준비하기


1. 배열을 다룰 변수를 준비한다(배열 선언)


ex) int[] test; ----> 배열 변수 test를 준비합니다. 


2. 값을 저장할 상자를 준비한다.(배열 요소 생성)


test = new int[5];  ----> int 형의 값을 5개 저장할 수 있는 배열을 생성합니다. 


이상태를 test배열을 가리킨다라고 부른다.


배열의 선언과 생성


배열 [] 배열 변수명;

배열 변수명 = new형명 [첨자];



test \= test[0], test[1], test[2], test[3], test[4]



배열에 값을 대입하기

int [] test;

test = new test[5];


test[0]= 80;  각각 다른 주소값을 가진다. 

test[1]= 60;  

test[2]= 22;  

test[3]= 50;  

test[4]= 75; 


각각 다른 주소값을 우리는 레퍼런스라고 부른다.

배열 변수명 [첨자] = 식;

여기에서는 5개의 배열 요소에 시험 점수를 대입하고 있습니다. 배열 요소에 값을 대입하는 방법은 변수에 값을 대입하는 방법과 동일하다.



반복문을 배열에 사용하기


sample1.java  배열을 사용하기


public class Sample1 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int num[];

num = new int[5];

num[0] = 80;

num[1] = 60;

num[2] = 22;

num[3] = 50;

num[4] = 75;

for(int i = 0; i<5; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + num[i]+"입니다.");  배열의 첨자는 0부터 시작하기 때문에 출력된눗널를 i+1번째로 하여 첫번째가 되게 하였다. 

}


}


}


실행결과


1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.

4번째 사람의 점수는50입니다.

5번째 사람의 점수는75입니다.



배열 첨자 사용시 주의점


아까전에 5개의 요소를 가지는 배열을 선언한 상태에서 test[10] 와 같이 배열의 크기보다 첨자를 []안에 대입하면 안된다.

int[]  test;

test = new int[5];
//오류

//test[10] = 50;


Sample1 배열 요소의 개수를 입력하기

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample2 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("시험 응시자의 수를 입력하십시오");

BufferedReader br = new BufferedReader( new InputStreamReader(System.in));

String str = br.readLine();

int num = Integer.parseInt(str);

int test[];

test = new int[num];

System.out.println("시험 응시자의 수 만큼 점수를 입력하십시오");

for(int i = 0; i<num; i++)

{

 str = br.readLine();

 int tmp = Integer.parseInt(str);

 test[i]=tmp;

for(int i = 0; i<num; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + test[i] +"입니다.");

}

}

}

출력 결과


시험 응시자의 수를 입력하십시오

5

시험 응시자의 수 만큼 점수를 입력하십시오

80

60

22

50

75

1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.

4번째 사람의 점수는50입니다.

5번째 사람의 점수는75입니다.



배열을 선언하는 또 다른 방법

int [] test;

test = new int[5];


두 문장으로 합칠수가 있다.

int [] test = new int[5];


배열 선언의 요소와 생성


배열 [] 배열 변수명 = new 형명[첨자] ;

Sample3.java 배열의 선언과 생성를 동시에 하기



public class Sample3 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int num[] = new int[5];

num[0] = 80;

num[1] = 60;

num[2] = 22;

num[3] = 50;

num[4] = 75;

for(int i = 0; i<5; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + num[i]+"입니다.");

}


}


}


실행결과


1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.

4번째 사람의 점수는50입니다.

5번째 사람의 점수는75입니다.




배열을 초기화하기


배열 초기화


형명 [] 배열 변수명 = {값1, 값2, 값3,....};



지금까지 예제로 썻던 배열 변수는 다음과 같이 수정이 가능하다

int[] test ={80,60,22,50,75};


public class Sample3 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int [] num = {80,60,55,22,50};

for(int i = 0; i<5; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + num[i]+"입니다.");

}


}


}





배열 변수에 값을 대입하기



Sample5.java



public class Sample5 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int[] test1;

test1 = new int[3];

System.out.println("test1을 선언했습니다.");

System.out.println("배열 요소를 생성했습니다.");

test1 [0] = 80;

test1 [1] = 60;

test1 [2] = 22;

int [] test2;

System.out.println("test2를 선언했습니다.");

test2 = test1;

System.out.println("test2에 test1을 대입했습니다.");

for(int i = 0; i<3; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + test1[i]+"입니다.");

}

for(int i = 0; i<3; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + test2[i]+"입니다.");

}

}

test1을 선언했습니다.

배열 요소를 생성했습니다.

test2를 선언했습니다.

test2에 test1을 대입했습니다.

1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.

1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.


먼저 배열을 선언하고 배열 변수 test1에 대입한다. 그 다음에는 test2 배열 변수를 선언하기만 했고

대입연산잘를 이용하여 test2에 test1을 대입하니


test2[0], test2[1]. test2[2]의 값을 출력해보면 test1과 출력값이 같음을 알수있다.



Sample2 배열 요소 값 바꾸기



public class Sample5 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int[] test1;

test1 = new int[3];

System.out.println("test1을 선언했습니다.");

System.out.println("배열 요소를 생성했습니다.");

test1 [0] = 80;

test1 [1] = 60;

test1 [2] = 22;

int [] test2;

System.out.println("test2를 선언했습니다.");

test2 = test1;

System.out.println("test2에 test1을 대입했습니다.");

for(int i = 0; i<3; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + test1[i]+"입니다.");

}

for(int i = 0; i<3; i++)

{

System.out.println((i+1) + "번째 사람의 점수는" + test2[i]+"입니다.");  ----다른 test2의변수를 사용하기 위해 for문을 반복

}

test1 [2] = 100;

System.out.println("test1이 가리키는 세 번째 사람의 점수를 변경합니다.");

for(int i = 0; i<3; i++)

{

System.out.println("test1이 가리키는" +(i+1) +"번째 사람의 점수는" + test1[i]+"입니다.");

}

for(int i = 0; i<3; i++)

{

System.out.println("test2가 가리키는" +(i+1) +"번째 사람의 점수는" + test2[i]+"입니다.");

}

}

}



실행결과

test1을 선언했습니다.

배열 요소를 생성했습니다.

test2를 선언했습니다.

test2에 test1을 대입했습니다.

1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.

1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는22입니다.

test1이 가리키는 세 번째 사람의 점수를 변경합니다.

test1이 가리키는1번째 사람의 점수는80입니다. ----> test1출력

test1이 가리키는2번째 사람의 점수는60입니다.

test1이 가리키는3번째 사람의 점수는100입니다.

test2가 가리키는1번째 사람의 점수는80입니다.----> test2출력

test2가 가리키는2번째 사람의 점수는60입니다.

test2가 가리키는3번째 사람의 점수는100입니다.


test1[2]사용하여 요소의 하나의 값을 100점으로 바꾸었다.

그 다음, test1[2], test[2]를 출력해 보면 두 배열 요소 모두 같은 값으로 변한다.

test1과 test2 는 2개의 다른 배열이 아니다. tes1의 배열을 변경하면 test2의 데이터도 변경되므로 주의해야 한다.



배열의 응용


배열의 길이를 알기

먼저 배열의 요소 수를 확인하는 코드를 작성한다. 배열의 요소 수(상자 수)는 배열의 길이(크기)라고 부릅니다.



배열의 길이

배열 변수명.length


test.length

Sample.java 배열의 길이를 알아내기




public class Sample7 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int [] test = {80, 60, 22, 50, 75};

for(int i = 0; i < 5(test.length) ; i++)

{

System.out.println((i+1)+ "번째 사람의 "+ "점수는 "+test[i]+ "입니다.");

}

System.out.println("시험의 응시자 수는"+ test.length + "입니다.");

}

}


실행결과


1번째 사람의 점수는 80입니다.

2번째 사람의 점수는 60입니다.

3번째 사람의 점수는 22입니다.

4번째 사람의 점수는 50입니다.

5번째 사람의 점수는 75입니다.

시험의 응시자 수는5입니다.


다차원 배열

배열 요소를 한 번 더 배열하면 다차원 배열도 만들 수 있다. 


다차원 배열의 준비


형 이름 [] [] 배열 변수명;

배열 변수명 = new 형명 [첨자] [첨자]


2차원 배열은 1처럼 선언한다. 그리고 int형의 값을 2*5=10개 저장하기 위해 2처럼 배열을 생성한다. 


Sample10 다차원 배열을 사용하기




public class Sample10 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int [] [] test;

test = new int[2] [5];

test[0][0] = 80;

test[0][1] = 60;

test[0][2] = 22;

test[0][3] = 50;

test[0][4] = 75;

test[1][0] = 90;

test[1][1] = 55;

test[1][2] = 68;

test[1][3] = 72;

test[1][4] = 58;

for(int i =0; i<5; i++)

{

System.out.println((i+1) + "번째 사람의 국어 점수는" + test[0][i] +"입니다.");

System.out.println((i+1 )+ "번째 사람의 수학 점수는" + test[1][i] +"입니다.");

}

}


}


실행결과

1번째 사람의 국어 점수는80입니다.

1번째 사람의 수학 점수는90입니다.

2번째 사람의 국어 점수는60입니다.

2번째 사람의 수학 점수는55입니다.

3번째 사람의 국어 점수는22입니다.

3번째 사람의 수학 점수는68입니다.

4번째 사람의 국어 점수는50입니다.

4번째 사람의 수학 점수는72입니다.

5번째 사람의 국어 점수는75입니다.

5번째 사람의 수학 점수는58입니다.



다차원 배열 선언하기


int [][] test = new int [2] [5];


생성 및 초기화

int [][] test = {80,60,22,50,75},{90,55,68,72,58};


길이가 일정하지 않은 배열 선언

int [][] test = {80,60,22,50},{90,55,68,72},{33,75,63}; ----> 비대칭 배열로 만들 수 있다.



sample11.java 길이가 일정하지 않은 다차원 배열




public class Sample11 {


public static void main(String[] args) {

// TODO Auto-generated method stub

int[][] test = { {80,60,22,50}, {90,55,68,72},{33,75,63}

};

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

System.out.println((i+1) +"번째 배열의 요소의 길이는" + test[i].length + "입니다.");

}

}


}


실행결과



1번째 배열의 요소의 길이는4입니다.

2번째 배열의 요소의 길이는4입니다.

3번째 배열의 요소의 길이는3입니다.




각각 배열 요소가 몇 개인지 요소를 조사하려면
test[].length
라고 작성한다.

예제 1)  키보드로 시험 점수를 입력받은 후 , 다음처럼 합계와 평균을 구하라


5명의 시험 점수를 입력하십시오

80

60

57

50

22

1번째 사람의 점수는80입니다.

2번째 사람의 점수는60입니다.

3번째 사람의 점수는57입니다.

4번째 사람의 점수는50입니다.

5번째 사람의 점수는22입니다.

합계는269입니다.

평균은53.8입니다.

public class Ex04 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("5명의 시험 점수를 입력하십시오");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int  [] test;

test = new int[5];

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

{

String str = br.readLine();

int temp = Integer.parseInt(str);

test[i] = temp;

}

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

{

System.out.println((i+1) +"번째 사람의 점수는" +test[i] +"입니다.");

}

int sum = 0;

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

{

sum += test[i];

}

System.out.println("합계는"+ sum  +"입니다.");

System.out.println("평균은"+ sum / 5.f +"입니다.");

}


}

최대값, 최소값 구하기

import java.util.*;


public class Ex04 {

public static void main(String[] args) {
// TODO Auto-generated method stub
int test[]  = new int[10];
int max=0;          //가장 작은값
int min=999; //가장 큰값
int j;
int i;
Scanner sc = new Scanner(System.in);
for(i =0;i<5;i++)
{
test[i]= sc.nextInt(); // 입력받은것을 배열에 저장한다. 이것이 중요
if(test[i]> max)
{
       max = test[i];
}
if(test[i]< min) 
{
       min = test[i];
}
}
 
System.out.println("가장큰값은" + max +"입니다.");
System.out.println("가장작은값은" + min +"입니다.");
}
}