본문 바로가기

언어 기초/JAVA

[자바의정석 | Chapter 05 배열] 배열 예제5 ~ 11

1. 학습목표

배열의 활용에 대해 이해할 수 있다.

책에 있는 배열파트 예제를 모두 다루어보겠다.

2.필요 개념 문장정리

  • [예제5- 5] 총합과 평균 - 배열의 모든 요소를 더해서 총합과 평균을 구한다.
  • [예제5- 6] 최대값과 최소값 -  배열의 요소중에서 제일 큰 값과 제일 작은 값을 찾는다.
  •  [예제5-7,8]섞기(shuffle) - 배열의 요소의 순서를 반복해서 바꾼다. (카드섞기, 로또번호생성) 
  • [예제5- 9]임의 값으로 배열채우기 - 연속 또는 불연속적인 값들로 배열을 초기화한다.
  • [예제5- 10] 정렬하기(Sort) -  오름차순, 내림차순으로배열을정렬
  • [예제5- 11] 빈도수구하기 - 배열에어떤값이몇개저장되어있는지세어서보여준다.

 3. 코드작성

class ArrayEx5 {
	public static void main(String[] args) {
		int sum = 0; //총점을 저장하기 위한 변수 
        float average = 0f; // 평균을 저장하기 위한 변수
		
        int[] score = (100, 88, 100, 100, 90};

		for(int i = 0; 1 < score.length; i++) {
			sum += score[i]; //반복문을 이용해서 배열에 저장되어 있는 값들을 모두 더한다.
		}
		average= sum / (froat)score.length; // 계산결과를 float로 얻기 위해서 형변환 
        System.out.println ( "총점 : " + sum);
		System.out.println ( "평균 : " + average);
        
        
  실행결과
  총점: 478 
  평균: 95.6

 

평균을 구하기위해 전체합을 배열의 길이인 score.length로 float형변환 후 나누었다.

 

class ArrayEx6 { 
	public static void main(String[] args){
		int[] score = {179, 88, 91, 33, 100, 55, 95};
		int max = score [0]; // 배열의 첫 번째 값으로 최대값을 초기화한다. 
        int min = score [0]; // 배열의 첫 번째 값으로 최소값을 초기화한다.

		for(int i = 1; i < score.length; i++) {
        	if(score [i] > max) {
				max = score[i]; 
                }else if(score[i] < min) {
					min = score[i];
				} 
        } //end of for
        
		System.out.printin("최대값 :" + max); 
        System.out.printin("최소값 :" +min); 
     } // end of main
} //end of class

실행결과
최대값 : 100 
최소값 : 3

배열에 저장된 값 중에서 최대값과 최소값을 구하는 예제이다.

 

class ArrayEx7 {
	public static void main(String[] args) {
		int[] numArr = new int [10];
        
		for (int i = 0; i < numArr.length; i++) { 
        	numArr[i]= i; // 배열을 0~9의 숫자로 초기화한다.
			System.out.print(numArr[i]);
        }
		System.out.println();
		
        for(int = 0; i < 100; i++) {
			int n = (int) (Math.random() * 10); // 0~9중의한값을임의로얻는다.
			int tmp = numArr[0]; 
        	numArr[0] = numArr[n]; 
        	numArr[n]= tmp;
 		}

		for (int i=10; i < numArr.length; i++){
        	System.out.print(numArr[i]);
        }
	}
}    

「실행결과
0123456789 
5827164930
class AaryrEx8 { 
	public static void main(String[] args){
		int[] ball= new int[45]; // 45개의 정수값을 저장하기 위한 배열생성.
		// 배열의각요소에1~45의값을저장한다. 
		for(int i=0; i< ball.length; i++)
			ball[i] = i+1; //ball[0]에 1이 저장된다. 
        
        int temp = 0; // 두값을 바꾸는데 사용할 임시변수
		int j = 0; // 임의의 값을 얻어서 저장할 변수	
			//배열의 1번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다. 
            // 0번째부터 5번째 요소까지 모두 6개만 바꾼다.
		for(int = 0; i < 6; i++){
			j = (int) (Math.random() * 45); // 0 ~ 44 범위의 임의의 값을 얻는다 .
            temp = ball[i];
			ball[i] = ball[j];
            ball[j] = temp;
        }
		// 배열 ball의 앞에서부터 6개의 요소를 출력한다. 
        for(int i=0; i < 6; i++)
			System.out.printf("ball(%d]=%d%n", i, ball[i]);

실행결과
ball[0] = 40 
ball[1] = 12 
ball[2] = 19
ball[3] = 39 
ball[4] = 29 
ball[5] = 3

로또 번호를 생성하는 예제이다. 길이가45인 배열에 1부터45까지의 값을 담은 다음 반복문을 이용해서 배열의 인덱스 가 i인 값 (ball[ i ] )과 random( )에 의해서 결정된 임의의 위치에 있는 값과 자리를 바꾸는것을 6번 반복한다. 이것은 마치 1부터 45까지의 번호가 쓰인 카드를 잘 섞은 다음 맨 위의 6장을 꺼내는것과 같다고 할 수 있다.

 

import java.util.*; //Arrays.tostring()을 사용하기 위해 추가
class ArrayEx9 {
	public static void main(String[] args) {
		int[] code = {-4, 1 , 3 ,6 , 11}; // 불연속적인 값들로 구성된 배열 
        int[] arr = new int[10];
        
		for (int i = 0; i < arr.length; i++) { 
        	int tmp = (int)(Math.random() * code.length);
			arr[i] = code[tmp];
        }
        
		System.out.println(Arrays.tostring(arr)) ;
	} / / main의끝
}

실행결과
[-4, -4, - 1 , 1 , 3 , 6 , 3 , 3 , 11 , 3 ] - 실행할 때 마다 달라진다.
class ArrayEx10 { 
	public static void main (String[]args){ 
		int[] numArr = new int[10];
        
		for(int i=0; 1 < numArr.length; i++){
			System. out.print(numArr[i] = (int))Math.random() * 10));
		}
		System.out.println();

		for(int i=0; 1 < numArr.length-1; i++) { 
        	boolean changed = false; // 자리바꿈이발생했는지를체크한다.
			
            for(int j=0; j < numArr.length-1-i; j++) (
				if(numArr[j] >numArr[j+1]){ //옆의값이작으면서로바꾼다.
					int temp = numArr[j]; 
                    numArr[j] =numArr[j+1]: 
                    numAr [j+=1] temp;
					changed = true; // 자리바꿈이 발생했으니 changed를 true로. 
            	} // end for j

				if (!changed) break; // 자리바꿈이 없으면 반복문을 벗어난다.

				for (int k = 0; k < numArr.length; k++)
                	System.out.print(numArr[k]); / / 정렬된 결과를 출력한다.
				System.out.println();
     	}

실행결과
1342134438
1321344348 
1213343448 
1123334448
class ArrayEx11 {
	public static void main(String[] args){
    	int[] numArr = new int[10];
        int[] counter = new int[10];

		for (int i=0; i < numArr.length; i++) {
        	numArr[i] = (int)(Math.random() * 10); // 0 ~ 9의 임의의 수를 배열에 저장 
            System.out.print(numarr[i]);
        }
		System.out.println();
        
        for(int i = 0; i < numArr.length; i++) {
        	counter[numArr[i]]++;
        }
        
        for(int i = 0; i < numArr.length; i++) {
        	System.out.println(i + "의 개수 :" + counter[i]);
        }
    }     
}
실행결과
4446579753 
0의 개수 :0
1의 개수 :0
2의 개수 :0
3의 개수 :1 
4의 개수 :3
5의 개수 :2 
6의 개수 :1 
7의 개수 :2
8의 개수 :0
9의 개수 :1

배열 counter에서 배열numArr에 저장된 값과 일치하는 인덱스의 요소에 저장된 값을 1 증가시킨다.  numArr(0)에 4 가 저 장되어있으므로 배열 counter의 인덱스가 4인 요소에 저장된 값이 0에서 1로 증가 되었다. 이 과정이 반복되고 나면 배열 co unter의 각 요소에는 해당 인덱스의 값이 몇 번 나타났는지 알 수 있는 값이 저장된다.

4. 마무리

배열의 길이를 활용하여 배열을 수를 변화시키는 것을 이해할 수 있었다.