KH/JAVA

#9 Array(배열)

오늘의 진 2022. 7. 12. 14:33

Array (배열)

:배열은 동일한 자료형으로 구성된 자료의 집합이다.

배열을 처리하기 위해 메모리에 연속된 기억공간을 사용한다. 

일반적으로 배열은 다음과 같은 3가지의 사항을 명시적으로 규정해야 한다.

 

1. 배열의 요소 

: 배열을 구성하는 각각의 요소들을 배열의 요소(Array Element)라고 부른다.

만약 int 형으로 구성된 비열이 있다면 이 배열의 요소는 int형 자료가 된다. 

배열을 정의할 때 배열 요소를 지정해야 한다.

 

2. 배열의 크기

: 배열은 동일한 자료형이 모여서 만들어지기 때문에 배열의 요소의 개수를 지정할 필요가 있다.

즉 몇 개의 배열 요소로 구성되었는지를 명시해야 한다.

 

3. 배열 명

: 배열은 자료형의 일종이기 때문에 이름을 지정해야 한다.

배열은 동일한 자료형을 여러 개 묵어 놓은 것이기 때문에 각각의 배열 요소를 대표할 이름이 필요하다.

 

배열의 선언

1. 자료형 [ ]  배 열명 ;     // java에서 보통 사용하는 형식
   int [7]  data; 

2. 자료형 배 열명 [ ];     // c언어에서 많이 쓰는 방식
  int data [7];

" int -배열의 요소 , data-배열의 이름, [7] - 배열의 크기 "를 의미한다.
data [0] data [1] data [2] data [3] data [4] data [5] data [6]

 

(배열 초기화 방법 예시)

1.

public class Array_2 {
	public static void main(String[] args) {
		int[] month = new int[] { 31, 28, 31, 30, 31, 31, 30, 31, 30, 31 };
		for (int i = 0; i < month.length; i++) {
			System.out.println((i+1+"월 : "+month[i]+"일"));
		}
	}
}

2. (가장 많이 씀)

public class Array_3 {
	public static void main(String[] args) {
		int[] month = { 31, 28, 31, 30, 31, 31, 30, 31, 30, 31 };

		for (int i = 0; i < month.length; i++) {
			System.out.println((i + 1 + "월 : " + month[i] + "일"));
		}
	}

}

3.

public class Array_1 {
	public static void main(String[] args) {
		int[] month = new int[12]; // 배열 객체 생성
		month[0] = 31;
		month[1] = 28;
		month[2] = 31;
		month[3] = 30;
		month[4] = 31;
		month[5] = 30;
		month[6] = 31;
		month[7] = 31;
		month[8] = 30;
		month[9] = 31;
		month[10] = 30;
		month[11] = 31;
		
		for (int i = 0; i < 12; i++) {
			System.out.println((i+1)+"월 = "+month[i]+"일");
		}
	}
}

 

다차원 배열

: 배열은 크기를 지정하는 방법에 따라 1차원 배열과 다차원 배열로 구분할 수 있다.

1차원 배열은 크기가 1개만 지정되고 다차원 배열은 2개 이상 지정된다. 

일반적으로 배열의 크기가 2개 지정하면 2차원 배열 3개 지정하면 3차원 배열이라고 하며

2,3차원 배 열등을 많이 사용한다.

 

2차원 배열

(형식)

배열의 선언 배열의 생성
자료형[ ][ ] 배열명 자료형[ ][ ]배열명 = new 자료형 [행][열];
자료형 배열명 [ ][ ] 자료형 배열명 [ ][ ] = new 자료형 [행][열];
자료형[ ] 배열명[ ] 자료형 [ ] 배열명[ ] =  new 자료형 [행][열];

 

(예시)

public class Array_4 {
	public static void main(String[] args) {
		int[][] one = new int[4][3];
		one[0][0] = 1;
		one[0][1] = 2;
		one[0][2] = 88;
		one[1][0] = 3;
		one[1][1] = 4;
		one[1][2] = 88;
		one[2][0] = 5;
		one[2][1] = 6;
		one[2][2] = 88;
		one[3][0] = 7;
		one[3][1] = 8;
		one[3][2] = 88;
        
        //int[][] one = { {1,2,88}, {3,4,88},{5,6,88},{7,8,88}}; 이렇게 선언해줄수도있음
        // int[][] one =new int[][] { {1,2,88}, {3,4,88},{5,6,88},{7,8,88}};

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

}

←실행결과

 

 

 

 

(실습예제)

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

		int[][] score = { { 100, 100, 100 }, { 90, 90, 90 }, { 80, 80, 80 }, { 70, 70, 70 }, { 60, 60, 60 }

		};

		int KorTotal = 0;
		int engTotal = 0;
		int mathTotal = 0;

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

		for (int i = 0; i < score.length; i++) {
        //행을 준비
			int sum = 0;
			KorTotal += score[i][0];
			engTotal += score[i][1];
			mathTotal += score[i][2];

			System.out.print("   " + (i + 1) + "   ");

			for (int j = 0; j < score[i].length; j++) {
            //각행을 채움
				sum += score[i][j];
				System.out.print(score[i][j] + "\t");

			}
			System.out.println(sum + "\t" + (float) sum / score[i].length);
            //println을 씀으로써 다음행으로의 개행까지 함께 해준다.

		}

		System.out.println("============================================");
		System.out.println("총점 : " + KorTotal + "\t" + engTotal + "\t" + mathTotal);

	}

←결과

 

 

 

 

 

 

 

 

 

 

(예제) 최대값 구하기

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

		int[] score = { 83, 64, 35, 97, 58, 73 };

		int max = score[0];
		int min = score[0];
        //0이아니라 다른 인덱스를 넣을 수는 있지만 그런경우 for문에서 i=0부터 모두 돌려야한다.
        //하지만 0을 넣어두면 i=1부터 차례로 돌리면 됨으로 돌리는 횟수를 1회 줄일수있다.

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

			if (score[i] < min) {
				min = score[i];
			}

		}

		System.out.println("최대값 : " + max);
		System.out.println("최소값 : " + min);

	}

}

 

(예제) 배열의 숫자 섞기

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

		for (int i = 0; i < number.length; i++) {
			number[i] = i;

			System.out.print(number[i] + "\t");
		}
		System.out.println();
		for (int i = 0; i < 100; i++) {
			int n = (int) (Math.random() * 10); //0~9

			int temp = number[0];
			number[0] = number[n];
			number[n] = temp;
            // 배열안의 수를 섞어주는 것
            //0번째와 임의의 n번째 자리를 100번 바꾸어줌
		}
		for (int i = 0; i < number.length; i++) {
			System.out.print(number[i] + "\t");
		}

	}

}

만약 temp를 쓰지 않고 

num[0]= num[n]으로 돌려준다면 0번째자리에 n번째 자리수가 복사되어 담기는 것으로 셔플되지 않음.

 

 

(예제) 로또 추첨기 만들기

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

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

		int temp = 0;
		int j = 0;

		for (int i = 0; i < 300; i++) {
        //300번 섞겟다(셔플하겠다)라는 말
			j = (int) (Math.random() * 45);
			temp = ball[0];
			ball[0] = ball[j];
			ball[j] = temp;
		}

		System.out.println();
		System.out.println("\n 1023차 로또 당첨번호 \n");

		for (int i = 0; i < 6; i++) {
			System.out.print(ball[i] + "\t");
		}
		System.out.println();
		System.out.println("\n 보너스 당첨번호 \n");
		System.out.println("\t" + ball[6] + "번 입니다.");

	}

}

← 결과