JAVA/개념정리
Chapter 05-2. 배열
inderrom
2022. 9. 14. 23:54
배열
- 여러개의 값을 하나의 변수에 저장해서 사용하는 것이다.
- 참조형 타입이다.
- 인덱스로 값을 구분한다 (인덱스는 0부터 시작)
- 길이를 변경할 수 없다.
// 기존 int 형 변수 6개 선언방법
int num1, num2, num3, num4, num5, num6;
// 배열
int[] intArray; // 배열의 주소를 저장할 공간이 만들어진다.
intArray = new int[5]; // 배열이 선언되고 그 주소가 저장된다.
System.out.println(intArray[0]);
// 배열의 순서는 0부터 시작이다.
System.out.println(intArray[0]);
System.out.println(intArray[1]);
System.out.println(intArray[2]);
System.out.println(intArray[3]);
System.out.println(intArray[4]);
타입별 기본값
- char : '\u0000'
- byte, short, int : 0
- long : 0L
- float : 0F
- double : 0.0
- boolean : false (0)
참조형변수(예: String) : null ("" X) (공백이 아니라 null이 들어감)
intArray = new int[] {1, 2, 3, 4, 5}; //길이를 지정하지 않으면 값을 넣어줘야함
System.out.println(intArray[0]);
intArray[0] = 10;
System.out.println(intArray[0]);
int[] array = {1, 2, 3, 4, 5};
//int[] array = new int[] {1, 2, 3, 4, 5};
int[] arr1;
arr1 = new int[] {1, 2, 3, 4, 5};
// int a;
// a = 10;
arr1 = new int[5]; // => {0, 0, 0, 0, 0,}
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
arr1[3] = 40;
arr1[4] = 50;
// 이전 방법
int i1 = 10;
int i2 = 20;
int i3 = 30;
int i4 = 40;
int i5 = 50;
// 합계를 구하라
int sum = i1 + i2 + i3 + i4 + i5;
double avg = sum / 5.0;
// 배열로
int[] score = new int[]{10, 20, 30, 40, 50, 60};
sum = 0;
for(int i = 0; i < score.length; i++) {
sum += score[i];
}
avg = (double) sum /score.length;
int[] arr2 = new int[5];
// arr2 .....
// arr2 =>6
//arr2.length = 6;
arr2 = new int[6];
개념 이해하면서 문제 풀기!
// 문제1. 10개의 정수를 저장할 수 있는 배열을 선언 및 초기화해주세요.
int[] list = new int[10];
System.out.println(Arrays.toString(list));
//문제2. 위에서 만든 배열의 모든 인덱스에
//1~100 사이의 랜덤한 값을 저장해주세요.
// 1~100 => 0~99 +1
Random rnd = new Random();
list[0] = rnd.nextInt(100) + 1;
list[1] = rnd.nextInt(100) + 1;
list[2] = rnd.nextInt(100) + 1;
list[3] = rnd.nextInt(100) + 1;
list[4] = rnd.nextInt(100) + 1;
list[5] = rnd.nextInt(100) + 1;
list[6] = rnd.nextInt(100) + 1;
list[7] = rnd.nextInt(100) + 1;
list[8] = rnd.nextInt(100) + 1;
list[9] = rnd.nextInt(100) + 1;
System.out.println(Arrays.toString(list));
for(int i = 0; i < list.length; i++) {
list[i] = rnd.nextInt(100) + 1;
}
System.out.println(Arrays.toString(list));
// 문제 3. 배열에 저장된 모든 값의 합계와 평균을 구해주세요.
sum = 0;
for(int i = 0; i < list.length; i++) {
sum += list[i];
}
avg = (double) sum / list.length;
System.out.printf("총점 : %d\n평균 : %.2f\n", sum, avg);
위에 문제에서 배열에 저장된 값들 중 최소값과 최대값 출력
int max = list[0];
int min = list[0];
for(int i = 0; i < list.length; i++) {
if(list[i] > max) max = list[i];
if(list[i] < min) min = list[i];
System.out.printf(i + "번째 : max : %d , min : %d\n", max, min);
}
System.out.printf("++최종 : max : %d , min : %d\n", max, min);
* max보다 list[i]가 커야지 최대값, min 보다 list[i]가 작아야 최솟값이 나온다 기호 잘 확인할 것!
배열의 값 섞는 법
String[] names = {"홍길동", "이순신", "유관순", "김유신", "아이유"};
System.out.println(Arrays.toString(names));
for(int i = 0; i < 5; i++) {
int rndIndex = rnd.nextInt(names.length);// => 0~4까지 나옴
String tmp = names[rndIndex];
names[rndIndex] = names[0];
names[0] = tmp;
System.out.println(Arrays.toString(names));
}
섞어주므로 temp를 사용한다. 랜덤인덱스를 집어넣고 temp를 통해 순서를 바꿔주기!
랜덤값 생성 후 횟수 출력
// 1~6 사이의 랜덤값을 500번 생성하고,
// 각 숫자가 생성된 횟수를 출력해주세요.
int[] dice = new int[6];
// dice = {0, 0, 0, 0, 0, 0,}
for(int i = 0; i < 500; i++) {
// int r = rnd.nextInt(6) + 1 ; // 1~6 => 0~5 + 1
// if(r == 1 ) dice[0] ++;
// if(r == 2 ) dice[0] ++;
// if(r == 3 ) dice[0] ++;
// if(r == 4 ) dice[0] ++;
// if(r == 5 ) dice[0] ++;
// if(r == 6 ) dice[0] ++;
int r = rnd.nextInt(dice.length) + 1;
dice[r - 1] ++;
//r = 1;
// dice[1 - 1] ++; => dice[0] ++;
//r = 3;
// dice[3 - 1] ++; => dice[2] ++;
}
System.out.println(Arrays.toString(dice));
// System.out.printf("1이 나온 횟수 : %d\n"
// + "2이 나온 횟수 : %d\n"
// + "3이 나온 횟수 : %d\n"
// + "4이 나온 횟수 : %d\n"
// + "5이 나온 횟수 : %d\n"
//// + "6이 나온 횟수 : %d\n",
//// dice[1], dice[2], dice[3], dice[4], dice[5]);
for(int i = 0; i < dice.length; i++) {
System.out.printf(
(i + 1) + "이(가) 나온 횟수 : %d\n", dice[i]);
}
// 문제 5. 21~50 사이의 랜덤 값을 650번 생성하고,
//21~50 => 1~30 + 20 => 0~29 + 21
// 각 숫자가 생성된 횟수를 출력해주세요.
int[] nums = new int[30];
for(int i = 0; i < 650; i++) {
// int r =rnd.nextInt(30) + 21;
// if(r == 21) nums[0]++;
// if(r == 22) nums[1]++;
// if(r == 23) nums[2]++;
// if(r == 24) nums[3]++;
// if(r == 25) nums[4]++;
int r = rnd.nextInt(nums.length) + 21;
nums[r - 21]++;
}
System.out.println(Arrays.toString(nums));
for(int i = 0; i < nums.length; i++) {
System.out.printf(
(i + 1) + "이(가) 나온 횟수 : %d\n", nums[i]);
}