배열이란 선형 자료구조(Data Structure)중 하나로 동일한 타입의 연관된 데이터를 메모리에 연속적으로 저장하여 하나의 변수에 묶어서 관리하기 위한 자료 구조.
배열은 하나의 변수에 여러 값을 저장하는 데 쓰이는 정적 리스트(static list)이다. 배열의 크기는 long 혹은 short가 아닌 int 값으로 특정되어야 한다. 배열에는 각 저장공간이 연속적으로 배치되어 있으며, 0부터 n-1까지 n개의 값을 특정 위치에 저장한다. 배열의 요소마다 붙여진 일련번호를 인덱스index라고 한다. (같은 타입의 여러 변수를 하나의 묶음으로 다룬다)
배열을 생성할 때엔 괄호[ ] 안에 배열의 길이, 즉 해당 배열에 값을 얼마만큼저장할 수 있는지를 적어준다. 배열의 길이는 0이 될 수도 있다. 자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, 배열명.length를 통해서 배열의 길이를 알아낼 수 있다.
* 한번 생성된 배열의 길이는 변경할 수 없다.
아래에 있는 자바코드는 java 배열 강의를 시청하며 따라해 만들어본 로또 프로그램이다.
6자리 숫자를 랜덤으로 생성해 1등 부터 5등까지의 당첨자를 만들어보았다.
import java.util.*; // Random + Scanner 두가지 기능을 한번에 (java.util 패키지에 있는 모든 클래스 import)
public class Arrays_lotto {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random random = new Random();
int lottoAr[] = new int[6];
int userAr[] = new int[6];
int bonus, bonusUser;
int count = 0;
// 로또 배열에 6개의 랜덤값 저장
for (int i = 0; i < 6; i++) {
lottoAr[i] = random.nextInt(45) + 1; // 0~44 -> 1~45
}
// bonus = random
bonus = random.nextInt(45) + 1;
System.out.println("Lotto:" + Arrays.toString(lottoAr) + ",bonus::" + bonus);
// 사용자에게 6개 값과 보너스를 입력 받기
System.out.print("숫자 6개 입력: ");
for (int i = 0; i < 6; i++) {
userAr[i] = sc.nextInt();
}
System.out.print("보너스 값 입력: ");
bonusUser = sc.nextInt();
System.out.println("User:" + Arrays.toString(userAr) + ",bonus::" + bonusUser);
// 로또 배열의 값과 사용자 배열의 값중 같은 값이 있다면 몇개 있는지 카운팅
for (int j = 0; j < 6; j++) {
for (int i = 0; i < 6; i++) {
if (lottoAr[j] == userAr[i]) {
count++;
}
}
}
System.out.println("총 맞춘 갯수:" + count);
// count의 갯수에 따라서 등수 정하기
if (count == 6) {
System.out.println("축하합니다! 1등입니다");
} else if (count == 5) {
if (bonus == bonusUser) {
System.out.println("축하드립니다! 2등입니다");
} else {
System.out.println("축하합니다! 3등입니다");
}
} else if (count == 4) {
System.out.println("축하합니다! 4등입니다");
} else if (count == 3) {
System.out.println("축하합니다! 5등입니다");
} else {
System.out.println("아쉽지만 다음 기회에");
}
}
}