Queue(FIFO구조), Tree(각 이름을 붙여 노드안에 데이터 저장 - 나무 구조), array(순차적 저장), Stack(FILO구조 핸드폰 뒤로가기), 리스트 (array와 비슷, 별칭을 달아줌)
-인덱스와 인덱스에 대응하는 데이터로 이루어진 연속적 자료구조
-대량의 데이터를 효율적으로 관리하기위한 메커니즘
-같은 타입의 여러변수를 하나의 묶음으로 다룸! 같은 종류의 데이터들이 순차적으로 저장됨
-길이가 고정적이다. 길이 지정해줘야됨.
-각위치의 번호(인덱스)가 있고 0부터 시작한다.
-길이는 배열명.length를 통해 알 수 있다.
-배열의 레퍼런스 변수로 배열의 주소를 저장한다.
배열이름[길이array.length]
int[] array = new int[10]; // 정수형 배열 길이 고정 [10]
//배열명.length 배열의길이를 알 수 있다.
int cnt = 70; //인덱스값
for (int i = 0; i < array.length; i++) {
array[i] = cnt;
cnt += 10;
}
// 0이라는 해당 인덱스에 접근
// array[0] = 70;
// array[1] = 80;
// array[2] = 90;
// System.out.println(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
// 해당인덱스안에 있는 값 꺼내기
// System.out.println(array[0]);
// System.out.println(array[1]);
// System.out.println(array[2]);
..........
//길이가 3인 정수형 배열 안에 10,20,30 넣기
//배열 생성방법
//1.배열 생성 후 -> 각 인덱스안에 값넣기 - 어떠한 값이 들어갈지 모를 때
int[] array1 = new int[3];
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
//2. 배열생성과 동시에 값을 넣음 - 어떠한 값이 들아갈지 인지하고 있을 때
int [] array2 = {10,20,30};
예제 : 다음과 같이 배열의 값이 정해져있을 때 3의 배수와 개수 추출
int[] array = { 3, 10, 4, 8, 17, 22, 31 };
int a = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 == 1) {
System.out.print(array[i] + " ");
a++;
}
}
System.out.println("가 있고, 총" + a + "개 입니다");
-> 인덱스 0부터 마지막 인덱스(array.length -1) 까지 변수 i를 통해 검사 실시
예제 : 1~ 5번째까지 점수를 입력받고, 크기가5인 배열에 값을 넣어주고 최대점수 최저점수 합, 평균을 구하기
Scanner sc = new Scanner(System.in);
int[] array = new int[5];
int a = 1;
for (int i = 0; i < array.length; i++) {
System.out.print(a + "번째입력 : ");
array[i] = sc.nextInt();
a++;
}
System.out.print("입력받은 점수 : ");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+ " ");
}
int max = array[0]; //배열 인덱스 초기화해줌
int min = array[0];
int sum = 0;
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
max = array[i]; //초기화값과 비교해서 i인덱스가 더 크면 i인덱스를 max 에 담아준다 =>레퍼런스 변수의 치환!
}
if (min > array[i]) {
min = array[i];
}
}
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
System.out.println();
System.out.println("최고 점수 : " + max);
System.out.println("최저 점수 : " + min);
System.out.println("총합 : " + sum);
System.out.println("평균 : " + (double)sum/array.length);
예제 : 1~10의 정수중에서 중복없는 로또 숫자 추출하기
Random rd = new Random();
System.out.println("===로또타임===");
System.out.println("이번주 출력번호는요...!!두구두구두구!!!!");
int[] arr = new int[5]; //크기 5인 배열 생성
for (int i = 0; i < arr.length; i++) {
arr[i] = rd.nextInt(10) + 1;
//배열 인덱스 i에 랜덤 숫자 1~10 추출, 1씩 증가됨
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
i--; // 전 값과 비교해서 중복이 있다면 인덱스값을 이전으로 돌림
break; //근접 반복문 멈추고 처음for문으로 돌아가기
}
}
}
System.out.println(Arrays.toString(arr));
//잘뽑혔는지 확인 출력문
또는 while문으로도 구할 수 있다.
Random rd = new Random();
int[] lotto = new int[5];
while(true) {
for(int i = 0; i<lotto.length; i++) {
lotto[i] = rd.nextInt(6)+1;
}
boolean isCheck = true; //중복 판별 변수
for(int i = 0; i < lotto.length - 1; i++) {
for(int j = i + 1; j<lotto.length; j++) {
if (lotto[i] == lotto[j]) {
isCheck = false;
}
}
}
if(isCheck) {
break;
}
}