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
	}
}

 

 

 

 

* 내용참고 - 수업 강의 및 자바의 정석

+ Recent posts