1. 배열의 활용
1) 섞기 (shuffle) - 배열의 요소의 순서를 바꾼다 (ex. 카드섞기, 로또번호생성)
1) 길이가 10인 배열을 생성, 0~9의 숫자로 차례대로 초기화하여 출력
2) random()을 이용해서 배열의 임의의 위치에 있는 값과 배열의 첫 번째 요소인 number[0]의 값을 교환하는 일을 반복
❗️ number[0]과 number[n]에 저장된 값을 서로 바꾸려면 별도의 저장공간이 하나 더 필요
// 별도 공간 생성 방법
int tmp = number [0];
number [0] = number [n];
nuber [n] = tmp;
public class MyArray_05 {
public static void main(String[] args) {
int[] number = new int[10];
for(int i = 0; i < number.length; i++) {
number[i] = i; // 배열을 0 ~ 9의 숫자로 초기화한다.
System.out.print(number[i] + " "); // 0 1 2 3 4 5 6 7 8 9
}
System.out.println();
for(int i = 0; i < 10000; i++) {
int n = (int)(Math.random() * 10); // 0~9중의 한 값을 임의로 얻는다.
// swap
int temp = number[0];
number[0] = number[n];
number[n] = temp;
}
for (int i = 0; i < number.length; i++) {
System.out.print(number[i] + " "); // 2 4 8 7 6 0 5 9 1 3
}
}
}
로또번호 생성하기
1) 길이가 45인 배열에 1부터 45까지의 값을 담는다
2) 반복문을 이용해서 배열의 인덱스가 i인 값과 random()에 의해서 결정된 임의의 위치에 있는 값과 자리를 바꾸는 것을 6번 반복한다.
❗️임의의 값으로 배열 채우기
public class MyArray_05_01 {
public static void main(String[] args) {
int[] number = new int[45];
for(int i = 0; i < number.length; i++) {
number[i] = i+1;
System.out.print(number[i] + " ");
}
System.out.println();
for(int i =0; i < 10000; i++) {
int n = (int)(Math.random() * 45);
// swap
int temp = number[0];
number[0] = number[n];
number[n] = temp;
}
for (int i = 0; i < 6; i++) {
System.out.print(number[i] + " ");
}
}
}
로또 중복값 제거
public class Ex_01_Array_04 {
public static void main(String[] args) {
int[] numbers = new int[6];
for(int i = 0; i < numbers.length; i++) {
int temp = (int)(Math.random() * 45) + 1; // 1 ~ 45의 임의의 값을 얻는다.
// 기존에 값이 있는지 확인
boolean isResult = true;
for(int j = 0; j < i; j++) {
if (numbers[j] == temp) {
System.out.println(temp + "은 중복된 값입니다.");
isResult = false;
break;
}
}
// 중복이 없으면 저장, 중복이 있으면 i값 1감소
if (isResult) {
numbers[i] = temp;
}
else {
i--;
}
}
System.out.println(Arrays.toString(numbers));
}
}
2. 2차원 배열
타입[][] 배열이름 ;
ex. int [][] scores = new int [3] [3] ;
🚀 2차원 배열의 선언 방법은 1차원 배열을 선언하는 부분에 괄호[]를 하나 더 추가
🚀 2차원 배열은 행과 열로 구성되어 있으며 첫 번째 괄호의 인덱스가 행을, 두 번째 괄호의 인덱스가 열을 뜻함
➡️ 위의 예제를 풀어보면 3행 3열을 뜻함. (3x3 = 총 9개의 방이 생김)
🚀 배열을 순회하려면 for문이 2개 필요
public class MyArray_07 {
public static void main(String[] args) {
/* 2차원 배열 선언 및 출력 */
int[][] arr = {
{1, 2, 3},
{4, 5, 6}
}; // 2차원 배열 선언
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
System.out.println("행: " + arr.length); // 2 (길이는 행만 불러옴)
System.out.println("열: " + arr[0].length); // 3 (0행의 칸이 몇개인지를 불러옴)
}
}
응용 문제
📍 중첩 for문을 이용해서 주어진 배열의 전체 항목의 합과 평균값을 구하세요
public class Ex_02_02 {
public static void main(String[] args) {
int[][] array = {
{95, 86},
{83, 92, 96},
{78, 83, 93, 87, 88}
};
int sum = 0;
double avg = 0.0;
int count = 0;
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
sum += array[i][j];
count++;
}
}
avg = (double) sum / count;
System.out.println("sum: " + sum); // 881
System.out.println("avg: " + avg); // 88.1
}
}
* 내용참고 - 수업 강의 및 자바의 정석
'Programming Language > JAVA' 카테고리의 다른 글
[Java] JVM 메모리 구조 · 오버로딩 (0) | 2024.08.09 |
---|---|
[Java] 메소드 (method) 선언과 구현 · 호출 · 종류 (0) | 2024.08.09 |
[Java] Array | 배열 선언과 생성 · 배열 길이와 인덱스 · 배열 초기화 · 배열 출력 (0) | 2024.08.09 |
[Java] while 문 · break문 · continue 문 (0) | 2024.08.09 |
[Java] Switch문 · for문 (0) | 2024.05.22 |