#9 Array(배열)
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] + "번 입니다.");
}
}
← 결과