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]);
		}