본문 바로가기
Backend/Java

Java 기초 문법 : 배열의 활용

by 코딩쥐 2024. 5. 19.

출처 : [자바의 정석 - 기초편], 남궁성의 정석코딩 / Java의 정석 3rd Edition

 

총합, 평균, 최대값, 최소값 구하기

public class Test {
public static void main(String[] args) {

	int[] score = {100, 88, 78, 90, 85};
	
	//총합
	int sum = 0; 
	
	for(int i=0; i<score.length; i++) {
		sum += score[i];
	}
	
	//평균 : 총합/개수, 평균은 소수점까지 나와야하기 떄문에 float 
	float average = 0; 
	average = sum / (float)score.length;
	
	//최대값, 최소값
	int max = score[0];
	int min = score[0];
	
    // max와 min에 저장되어있는 값과 비교하여 저장
	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("총합 : " + sum);
	System.out.println("평균 : " + (float)average);
	System.out.println("최대값 : " + max);
	System.out.println("최소값 : " + min);
}
}

// 총합 : 441
// 평균 : 88.2
// 최대값 : 100
// 최소값 : 78

 

섞기(shuffle)

: 배열의 요소의 순서를 반복해서 바꿈

import java.util.Arrays;

public class Test {
public static void main(String[] args) {

	// 숫자 1~45 중 6개를 랜덤으로 뽑을 때
	int[] numArr = new int[45];
	
	// numArr에 1부터 45까지 순서대로 값을 넣음
	for(int i=0; i<numArr.length; i++) {
		numArr[i] = i+1; // 숫자 1부터 시작하기 위해 +1함
	}
	
	
	for(int i=0; i<10; i++) { // 10번 동안 반복
		int n = (int)(Math.random()*45); // 0~44 범위를 랜덤으로 추출
		int tmp = numArr[i]; // numArr[0~9]까지의 값을 저장하는 공간 
		numArr[i] = numArr[n]; //numArr[i]의 숫자가 n번째 요소로 변경됨
		numArr[n] = tmp; //tmp값을 numArr[n]에 저장하여 섞음
	}
	System.out.println(Arrays.toString(numArr));
}
}

 

임의의 값으로 배열 채우기

import java.util.Arrays;

public class Test {
public static void main(String[] args) {

	//num이라는 배열 안에 있는 임의의 값을 arr 배열에 랜덤으로 저장
	int[] num = {-1,4,10,-50,80,20,15,-14};
	int[] arr = new int[10]; 
	
	for(int i=0; i<arr.length; i++) {
		int n = (int)(Math.random()*num.length);
		arr[i] = num[n];
	}
	
	System.out.println(Arrays.toString(arr));
}
}

//[-14, 10, 4, 4, 10, 80, 15, 15, 15, 10], 값은 매번 변경됨

 

버블정렬

: 배열의 길이가 n일 때, 배열의 첫 번째부터 n-1까지의 요소에 대해 근접한 값과 크기를 비교하여 자리바꿈을 반복하는 것

import java.util.Arrays;

public class Test {
public static void main(String[] args) {

	// 0~30 사이의 난수 10자리로 이루어진 numArr 배열 생성
	int[] numArr = new int[10];
	for(int i=0; i<numArr.length; i++) {
		int n = (int)(Math.random()*30);
		numArr[i] = n;
	}
	
	System.out.println(Arrays.toString(numArr));
	
	// numArr 배열의 버블정렬
	// 10개의 숫자가 있는 경우 9번만 비교하면 되기 때문에 numArr.length-1 	
	for(int i=0; i<numArr.length-1; i++) {
		boolean changed =false; // 매 반복마다 changed를 false로 초기화 
		
		//반복할수록 비교해야하는 범위가 줄기때문에 numArr.length-1-i
		for(int j=0; j<numArr.length-1-i; j++) {
			if(numArr[j] > numArr[j+1]) {
				int tmp = numArr[j];
				numArr[j] = numArr[j+1];
				numArr[j+1] = tmp;
				changed = true;
			}
		}
		if(!changed) break; // 자리바꿈이 없으면 반복문 벗어남
		}
		System.out.println(Arrays.toString(numArr));
		// 자리바꿈이 없어서 반복문이 끝나면 정렬된 배열 보여줌
}
}

//[24, 26, 9, 29, 16, 12, 19, 2, 7, 18]
//[2, 7, 9, 12, 16, 18, 19, 24, 26, 29]

 

 

다차원 배열의 활용

public class Test {
public static void main(String[] args) {
	
// 1열은 수학점수, 2열은 영어점수, 3열은 수학점수 그리고 각 행은 각 학생들의 점수
	int[][] score = {
			{100,100,100}
			,{90,80,95}
			,{88,96,100}
			,{40,80,50}
			,{30,50,60}
	};
	
	System.out.println("번호  국어  영어  수학  총점  평균");
	System.out.println("============================");
	
	//과목별 총점
	int korTotal=0, engTotal=0, mathTotal=0;
	for(int i=0; i<score.length; i++) {
		int sum=0; 
		float avg=0.0f;
		
		korTotal += score[i][0];
		engTotal += score[i][1];
		mathTotal += score[i][2];
		
		System.out.printf("%d", i+1);
		
		for(int j=0; j<score[i].length;j++) {
			sum += score[i][j];
			System.out.printf("%6d", score[i][j]);
		}
		avg = sum/(float)score[i].length;
		System.out.printf("%5d  %5.1f%n", sum, avg); 
        //평균 첫째자리 수까지(.1f)
	}
	
	System.out.println("============================");
	System.out.printf("총점: %2d %4d %5d%n", korTotal, engTotal, mathTotal);
}
}

//번호  국어  영어  수학  총점  평균
//============================
//1   100   100   100  300  100.0
//2    90    80    95  265   88.3
//3    88    96   100  284   94.7
//4    40    80    50  170   56.7
//5    30    50    60  140   46.7
//============================
//총점: 348  406   405

 

import java.util.Scanner;

public class Test {
public static void main(String[] args) {

	// 영어단어 뜻 맞추는 프로그램
	String[][] words = {
			{"chair", "의자"}
			,{"computer", "컴퓨터"}
			,{"integer", "정수"}
	};
	
	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.println("정답입니다.");
		}else {
			System.out.println("틀렸습니다. 정답은 " + words[i][1] + "입니다.");
		}
	}
}
}

//Q.1 chair의 뜻은?의자
//정답입니다.
//Q.2 computer의 뜻은?컴퓨터
//정답입니다.
//Q.3 integer의 뜻은?오답
//틀렸습니다. 정답은 정수입니다.

 

Arrays로 배열 다루기

import java.util.Arrays;

public class Test {
public static void main(String[] args) {

	int[] arr1 = {1,4,6,0,2,3,5};
	int[][] mulArr1 = {
			{1,4}
			,{0,2}
			,{3,5}};
	
	int[][] mulArr2 = {
			{1,4}
			,{0,2}
			,{3,5}};

	//배열의 복사 - copyOf, copyOfRange
	int[] arr2 = Arrays.copyOf(arr1, arr1.length); //arr 배열 그대로 복사
	int[] arr3 = Arrays.copyOf(arr1, 3); //arr배열 3번째 index까지 복사
	int[] arr4 = Arrays.copyOfRange(arr1, 2, 4); //arr배열 2번째에서 4번재 index복사
	
	//배열의 출력 - Arrays.toString, Arrays.deepToString
	System.out.println(Arrays.toString(arr2));
	System.out.println(Arrays.toString(arr3));
	System.out.println(Arrays.toString(arr4));
	System.out.println(Arrays.deepToString(mulArr1));
	
	//배열의 비교 - Arrays,equals, Arrays.deepEquals
	System.out.println(Arrays.equals(arr1, arr2));
	System.out.println(Arrays.deepEquals(mulArr1, mulArr2));
	
	//배열의 정렬 - sort()
	Arrays.sort(arr1);
	System.out.println(Arrays.toString(arr1)); //오름차순 정렬
} 
}

//[1, 4, 6, 0, 2, 3, 5]
//[1, 4, 6]
//[6, 0]
//[[1, 4], [0, 2], [3, 5]]
//true
//true
//[0, 1, 2, 3, 4, 5, 6]