자바

[자바] 배열의 활용

j9972 2022. 7. 1. 10:31
728x90

1차원 배열의 활용

1. 총합과 평균

class ex{
	public static void main(String[] args) {
    	int sum = 0;
        float avg = 0f;
        
        int[] score = { 100, 88, 100, 100, 90};
        
        for(int i = 0; i < score.length; i++ ) {
        	sum += score[i]
        }
        
        avg = sum / (float)score.length;
        
        System.out.println("총점: " + sum);
        System.out.println("평균: " + avg);
	}
}

여기서 볼점은, avg가 float 타입이기 때문에 f를 써줬다는 점이랑  평균을 구할때 타입변환 해줬다는 점이다

 

2. 최대와 최소

class ex{
	public static void main(String[] args) {
        int[] score = { 79, 88, 91, 33, 100, 55, 95};
        
        int max = score[0]
        int min = score[0]
        
        for(int i = 0; i < score.length; i++ ) {
        
		if(score[i] > max) {
	            	max = score[i];
    	        } else if (score[i] < min ) {
        	    	min = score[i]
            	}
            
        }
        
        System.out.println("최대값: " + max);
        System.out.println("최소값: " + min);
	}
}

여기서 볼점은 배열의 첫번째 값을 최대, 최소로 초기화를 했다는 점이다.

 

3. 셔플

class ex{
	public static void main(String[] args) {
        int[] arr = new int[10];
        
        for(int i = 0; i < arr.length; i++ ) {
		arr[i] = i; // 배열을 0-9로 초기화
	        System.out.print(arr[i]); // 순차적으로 배열이 출력된다
        }
        System.out.println();
        
        for(int i = 0; i < arr.length; i++) {
            int n = (int)(Math.random() * 10 ); // 랜덤으로 숫자 생성
            int tmp = arr[i];
            arr[i] = arr[n]
            arr[n] = tmp; // 셔플
        }
        for (int i = 0; i < arr.length; i++ )
        	System.out.println(arr[i]) // 셔플된 배열을 출력
	}
}

여기서 볼점은, 배열에 처음에 중복된 값이 없기때문에, 셔플시에 중복에 대한 걱정을 하지 않아도 된다.

 

3-1. 셔플로 로또 만들기

class ex{
	public static void main(String[] args) {
        int[] ball = new int[45];
         
        for(int i = 0; i < ball.length; i++ ) {
	        ball[i] = i+1; // 배열을 1-45로 초기화
        }

        int temp = 0;
        int j = 0;
        
       for(int i = 0; i < 6; i++) { // 6개만 바꾸는 이유는 로또 번호는 6개이므로
            j = (int)(Math.random() * 45 ); // 랜덤으로 숫자 생성
            temp = ball[i];
            ball[i] = ball[j]
            ball[j] = temp; // 셔플
        }
        for (int i = 0; i < 6; i++ )
            System.out.printf("ball[%d] = %d %n", i, ball[i]); // 셔플된 배열을 출력
    }
}

 

4. 임의의 값으로 배열 채우기

import java.util.*;
class ex{
   public static void main(String[] args) {
        int[] code = { -4, -4, -1, -1, 3, 6 ,3 ,3, 11, 3};
        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)); // 불연속적인 임의의 값이 나온다
   }
}

여기서 볼점은, 0부터 code의 길이만큼 랜덤숫자를 생성하고 code 배열에서 임의로 숫자를 받아서 arr에 복사한다는 점, Arrays.toString(배열) 은 배열의 값이 나오고, Arrays.toString() 은 배열의 주소값이 나온다는 점이다.

 

5. 빈도수

class Ex {
	public static void main(String[] args) {
    	int[] num = new int[10];
    	int[] counter = new int[10];
        
        for(int i =0; i < num.length; i++) {	
            num[i] = (int)(Math.random() * 10);
            System.out.print(num[i]);
	}
        System.out.println();
        
        for(int i = 0; i < num.length; i++) {
        	counter[arr[i]]++; // 이 부분이 빈도수를 체크해준다 
	}
        for(int i = 0; i < arr.length; i++ ) {
        	System.out.println( i + "의 개수 :" + counter[i]);
	}
    }
}

여기서는 counter[arr[i]]++; 이 부분만 보면 되는데, 인덱스의 위치를 찾아와서 빈도수를 하나씩 증가 시켜주면된다

 

 

String 배열의 활용

1. 16진수 2진수로 바꾸기

class ex {
	public static void main(String[] args) {
	    	char[] hex = { 'C','A','F','E' );
	    	String[] binary = { "0000", "0001", "0010", "0011",
        					 "0100", "0101", "0110", "0111",
                              "1100", "1101", "1110", "1111" }

		Sring res= "";
        
		for(int i = 0; i < hex.length; i++ ) {
                     if(hex[i] >= '0' && hex[i] <= '9' ) {
            	        res += binary[hex[i] - '0' ];
	             } else { 
    	                res += binary[hex[i] - 'A' + 10 ];
		    }
                }
	        System.out.print;ln("hex : " + new String(hex));
                System.out.print;ln("binary : " + res);
	}
}

여기서 볼 점은, hex의 범위가 10이상일때와 아닐때 처리하는 방법을 보면 된다

 

다차원 배열의 활용

1. 단어 맞추기

import java.util.*;

class ex {
    public stati void main(String[] args) {
        String[][] words = ( {"chair", "의자" }, // word[0][0], word[0][1]
            {"computer", "컴퓨터"}, // word[1][0], word[1][1]
            {"integer", "정수"} } // word[2][0], word[2][1]
        Scanner scanner = new Scanner(System.in);
        
        for(int i = 0; i < words.length; i++) {
            System.out.printf("Q%d. %s의 뜻은?", i+1, words[i][0] );
            
            String tmp = scanner.nextLine();
            
            if (tmp.equals(words[i][1])) {
                System.out.printf("정답. %n%n");
            } else {
                System.out.printf("틀림. 정답은 %s 입니다. %n%n", word[i][1] );
            }
        }
    }
}