본문 바로가기

웹 개발/Java

[Web_JAVA] 10

2차원 배열

- 배열 안에 배열

- 1차원 배열을 여러 개 선언할 때 관리하기 힘들기 때문에 2차원 배열을 한 번 선언한다.

 

 2차원 이상의 배열은 메모리 낭비가 심하므로 선호하지 않는다.

 

 

 

● 2차원 배열 선언

- 자료형[][] 배열명 = {{값1, 값2, ...}, {값3, 값4, ...}};

- 자료형[][] 배열명 = new 자료형[행][열];

- 자료형[][] 배열명 = null;

   배열명 = new 자료형[행][열];

 

(ex) int[][] arrData = new int[2][3];

 

 

 


 

실습(배열)

1. 5개의 정수를 입력받고 배열에 담은 후 최대값과 최소값 출력하기

import java.util.Scanner; 

public class ArTask1 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int[] arData = new int[5];
		int max = 0;  // 최대값을 담아줄 변수
		int min = 0;  // 최소값을 담아줄 변수
				
		for (int i = 0; i < arData.length; i++) {
			System.out.print(i + 1 + "번째 정수 : ");
			arData[i] = sc.nextInt();  // 입력받은 정수를 arData 배열에 담아준다.
		}
		
		max = arData[0];  // 최대값을 arData[0]의 값으로 초기화한다.
		min = arData[0];  // 최소값을 arData[0]의 값으로 초기화한다.
		
		for (int i = 1; i < arData.length; i++) {  // arData[0]의 값으로 초기화했기 때문에 i를 1로 초기화한다.
			if(max < arData[i]) {
				max = arData[i];
			}
			if(min > arData[i]) {
				min = arData[i];
			}
		}
		
		System.out.println("최대값 : " + max);
		System.out.println("최소값 : " + min);
		
	}
}

 

결과

 

 

 

 

2. 사용자가 입력할 정수의 개수만큼 배열을 만든 후 정수를 입력받고 평균 구하기

import java.util.Scanner; 

public class ArTask1 {
	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		int[] arData = null;
		int total = 0;
		double avg = 0.0;
		
		System.out.print("입력할 정수의 개수 : ");
		arData = new int[sc.nextInt()];  // 입력한 수를 배열의 크기로 선언한다.
		
		for (int i = 0; i < arData.length; i++) {
			System.out.print(i + 1 + "번째 정수 : ");
			arData[i] = sc.nextInt();
			total += arData[i];
		}
		avg = total / (double)arData.length;  // 총합에서 전체 개수를 나누어 평균을 구한다.
		
		// String.format("서식문자", "값, ...") : 서식문자에 들어간 값을 문자열로 바꿔준다.
		// 예) String.format("%d", 10) == "10"
		// 문자열로 결과가 나오기 때문에 다시 실수로 변경하기 위해서는
		// Double 클래스에 있는 parseDouble("문자열")을 사용한다.
		// 기존에 있던 avg 값을 서식문자로 변경된 avg 값으로 수정한다.
		avg = Double.parseDouble(String.format("%.2f", avg));
		
		for (int i = 0; i < arData.length; i++) {
			System.out.print(arData[i]);  // 사용자가 입력한 정수를 출력한다.
			if(i != arData.length - 1) {  // 마지막 반복이 아니라면
				System.out.print(", ");  // 출력한 정수 뒤에 ", "를 출력한다.
			}
		}
		System.out.println("\n총합 : " + total);
		System.out.println("평균 : " + avg);

	}
}

 

결과

 

 

 

실습(문자 배열)

1. length()

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

		String data = "ABC";  // 3칸짜리 문자 배열

		System.out.println(data.length());

		
	}
}
 
결과

 

 

 

2. charAt()

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

		String data = "ABC";  // 3칸짜리 문자 배열

		System.out.println(data.charAt(1));

		
	}
}

 

결과

 

 

 

3. split()

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

		String scores = "10, 20, 30";

		// scores.split(",")는 3칸 문자열 배열의 시작 주소이다.
		System.out.println(scores.split(", ")[1]);

		
	}
}

 

결과

 

 

 

※ 문자열 배열

public class StringTest { 
	
	public static void main(String[] args) {
		
		String scores = "10, 20, 30";
		String[] arScore = {"10", "20", "30"};

		System.out.println(arScore[1]);  // scores.split(",")[1]과 같다

		// arScore라는 문자열 배열에 위 배열의 시작주소를 대입한다.
		// 자료형이 서로 같기 때문에 가능하다.
		arScore = scores.split(",");  
		
	}
}

 

결과

 

 

 

 

실습(문자열 배열)

1. 사용자에게 입력받은 문자열 중 소문자는 모두 대문자로, 대문자는 모두 소문자로 변경한다.(알파벳이 아닌 문자들은 그대로 유지한다.)

import java.util.Scanner;
 
public class ArTask2 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// 아래에서 대입을 한다면 null로 초기화
		String str = null;
		
		// 아래에서 연결을 한다면 ""로 초기화
		String result = "";  // 대문자 또는 소문자로 변경된 값을 담아줄 변수
		
		System.out.print("문자열 : ");
		str = sc.next();

		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);

			if(c >= 65 && c <= 90) {
				result += (char)(c + 32);
			} else if(c >= 97 && c <= 122) {
				result += (char)(c - 32);
			} else {
				result += c; 
			}
			
		}
		System.out.println("변경된 문자열 : " + result);
		
	}
}

 

결과

 

 

 

2. 입력한 정수를 한글로 변경한다.

※ 참고

입력 예) 1024 
출력 예) 일공이사

//1회차
// 1024 % 10 == 4
// 1024 / 10 == 102

//2회차
//102 % 10 == 2
//102 / 10 == 10

//3회차
//10 % 10 == 0
//10 / 10 == 1

//4회차
//1 % 10 == 1
//1 / 10 == 0

// 몫이 0일 때까지 반복

 

 

- 코드

import java.util.Scanner;

public class ArTask2 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		String hangle = "공일이삼사오육칠팔구";
		int num = 0; 
		String result = "";
		
		System.out.print("정수 : ");
		num = sc.nextInt();
		
		while(num != 0) {
			result = hangle.charAt(num % 10) + result;  // hangle에서 나머지 값과 같은 인덱스에 들어있는 값을 가져온다.
			num /= 10;
		}

		System.out.println(result);
		
	}
}

 

결과

 

 

 

 

실습(2차원 배열(1))

public class ArrTest { 
	public static void main(String[] args) {
		
		int[][] arrData = {
				{3, 4, 5, 6},
				{8, 9, 0, 9},
				{1, 2, 3, 4}
		};
		
		System.out.println(arrData);  // 주소값
		System.out.println(arrData[0]);  // 주소값
		System.out.println(arrData[0][0]);  // 0행 0열의 값
		
	}
}

 

결과

 

 

 

 

실습(2차원 배열(2))

1. 2치원 배열의 길이 출력

public class ArrTest {
	public static void main(String[] args) {
		
		int[][] arrData = {
				{3, 4, 5, 6},
				{8, 9, 0, 9},
				{1, 2, 3, 4}
		}; 

		System.out.println(arrData.length);  // 행의 길이
		System.out.println(arrData[0].length);  // 열의 길이
		
		int length = arrData.length * arrData[0].length;  // 전체 길이 = 행의 길이 * 열의 길이
		System.out.println(length);  // 전체 길이
		
	}
}

 

결과

 

 

 

2. 2차원 배열의 모든 값 출력하기

- 이중 for문 사용

public class ArrTest { 
	public static void main(String[] args) {
		
		int[][] arrData = {
				{3, 4, 5, 6},
				{8, 9, 0, 9},
				{1, 2, 3, 4}
		};

		for (int i = 0; i < arrData.length; i++) {  // 행
			for (int j = 0; j < arrData[i].length; j++) {  // 열
				System.out.print(arrData[i][j] + " ");
			}
			System.out.println();
		}
		
	}
}

 

결과

 

 

※ for문과 if문 사용

public class ArrTest {
	public static void main(String[] args) {
		
		int[][] arrData = {
				{3, 4, 5, 6},
				{8, 9, 0, 9}, 
				{1, 2, 3, 4}
		};
	
		for (int i = 0; i < length; i++) {
			System.out.print(arrData[i / 4][i % 4] + " ");

			if((i + 1) % 4 == 0) {
				System.out.println();
			}

		}
		
	}
}

 

 

 

3. 1부터 12까지 각 방에 순서대로 대입한다.(이중 for문을 사용해서 해결한다.)

public class ArrTest {
	public static void main(String[] args) {
		
		int[][] arrData = {
				{3, 4, 5, 6},
				{8, 9, 0, 9},
				{1, 2, 3, 4}
		}; 
		
		int count = 0;
		for (int i = 0; i < arrData.length; i++) {
			for (int j = 0; j < arrData[i].length; j++) {
				arrData[i][j] = ++count;

				//%02d : 두 자리수로 간격을 맞춰주고, 두 자리수가 아니라면 앞에 0을 붙여준다.
				System.out.printf("%02d ", arrData[i][j]);
			}
			System.out.println();
		}

	}
}
 
결과

 

 

 

'웹 개발 > Java' 카테고리의 다른 글

[Web_JAVA] 12  (0) 2022.02.26
[Web_JAVA] 11  (0) 2022.02.25
[Web_JAVA] 09  (0) 2022.02.23
[Web_JAVA] 08  (0) 2022.02.22
[Web_JAVA] 07  (0) 2022.02.21