본문 바로가기
자바 한계단

자바 공부 이차 배열 복습

by juneMiller 2021. 9. 24.

 

기본 이차 배열의 구조와 초기화는 다음과 같이 할 수 있다.

public void method2() {
		int[][] arr = new int[3][5];

		// 1 2 3 4 5
		// 6 7 8 9 10
		// 11 12 13 14 15

		// 값 기록
		// 1. 인덱스에 접근하여 값기록
		/*
		 * arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[0][3] = 4; arr[0][4] = 5;
		 * 
		 * arr[1][0] = 6; arr[1][1] = 7; arr[1][2] = 8; arr[1][3] = 9; arr[1][4] = 10;
		 * 
		 * arr[2][0] = 11; arr[2][1] = 12; arr[2][2] = 13; arr[2][3] = 14; arr[2][4] =
		 * 15;
		 */

		// 2.중쳡 for 문이용하여 값 기록

		int value = 1;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = value++;
			}
		}

		for (int i = 0; i < arr.length; i++) { // 행 3
			for (int j = 0; j < arr[i].length; j++) { // 열 5개
				System.out.printf("%2d", arr[i][j]);
			}
			System.out.println(); // 개행
		}
	}

 

사용자에게 값을 받아 활용하는 메소드 

public void method6() {
		// 국어 점수 영어 점수 3번찍어서 평균을 구해보세요
		// double 형을 받으세요 double[][] arr = new double[2][4];

		double[][] arr = new double[2][4];

		Scanner sc = new Scanner(System.in);

		int arrILgth = 0;
		// 배열 길이를 초기화

		for (int i = 0; i < arr.length; i++) { // 배열 (행) 이 늘어 나는 동안
			double sum = 0;
			// 변수 합을 담아 둘 수 있는 초기화 해서 갖고 있고

			arrILgth = arr[i].length - 1;
			for (int j = 0; j < arrILgth; j++) { // 열 이 늘어나는 동안 각 과목의 점수를 담을 수 있도록 // 어차피 3회민 됨// 길이가 3으로 설정
				// length -1 : 해서 4열에서 3열로 줄여 놓음
				
				if (i == 0) { // 첫 행이 0라면, 국어점수를 담고
					System.out.println("국어점수 : ");
				} else { // 아니라면 영어점수를 담고
					System.out.println("영어점수: ");
				}

				
				arr[i][j] = sc.nextDouble();

				//  [0,0],[0,1],[0,2]
				//  [1,0],[1,1],[1,2]
				//값을 답아서 다 더하면 합계이니 
				sum += arr[i][j];

			}

			
			// 마지막 열에 다 합친 값을 담아줌 
			arr[i][arrILgth] = sum;
			
			
			System.out.println("합 ---->" + arr[i][arrILgth]);

		}

		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(" arr[ " + i + "][" + j + "] " + arr[i][j]);
			}

			System.out.println();
		}

		DecimalFormat f1 = new DecimalFormat("0.00");
		System.out.println("국어점수 평균 : " + arr[0][arrILgth] / arrILgth);
		System.out.println("영어점수 평균 : " + arr[1][arrILgth] / arrILgth);

		System.out.println("국어점수 평균 : " + f1.format(arr[0][arrILgth] / arrILgth));
		System.out.println("영어점수 평균 : " + f1.format(arr[1][arrILgth] / arrILgth));
	}

 

 

 

 

랜덤값 구해서 이중 배열 구조에 넣어보기 

 

public void method7() {
		// 1부터 10까지 랜덤 값을 3행 3열 값을 넣으려고 한다
		// 중복을 제거해서

		// 1차원 배열로 중복 제거한 9 개 값으 구해 놓고 --> 2차원으로
		// int[][] arr = new int[3][3];

		int[] iArr = new int[9];

		for (int i = 0; i < iArr.length; i++) {
			iArr[i] = (int) (Math.random() * 10 + 1);
			for (int j = 0; j < i; j++) {
				if (iArr[i] == iArr[j]) {
					i--;
					break;
				}
			}

		}
		int[][] newArr = new int[3][3]; // 행 열 값을 초기화 세팅 하고
		int index = 0; // 1차원 for 문에 접근하기 위해 초기값 세팅

		for (int i = 0; i < newArr.length; i++) { // 새로 배열한 2차원 배열 값대로 순차적으로 행으로 접근 먼저하고
			for (int j = 0; j < newArr[i].length; j++) { // 그 안쪽으로 열 값대로 순차적으로 진행하면서
				newArr[i][j] = iArr[index++]; // 그동안 각 주소에 1차 for 문에서 구한 인덱스 값을 하나씩 ++ 하면서 가져 옵니다.
			}

		}
		for (int i = 0; i < newArr.length; i++) { // 출력을하기 위해 새로 배정한 행 값에 진행에 따라

			for (int j = 0; j < newArr[i].length; j++) { // 열값 배정에 따라
				System.out.print(newArr[i][j] + " "); // (0,0) > 위치한 값을 넣고 (0,1)에 있는 값을 넣고 ... 계속진행

			}
			System.out.println(); // 행마다 주소값 // 개행

		}
	}

 

 

 

이중 배열을 통한 빙고게임 메소드 

 

 

// 빙고게임
	public void bingo() {
		Scanner sc = new Scanner(System.in);

		// 1차원 배열로 중복을 제거한 25개의 값을 구하고
		int[] temArr = new int[25];
		
		for (int i = 0; i < temArr.length; i++) {
			temArr[i] = (int) (Math.random() * 25 + 1);
			for (int j = 0; j < i; j++) {
				if (temArr[i] == temArr[j]) {
					i--; // 중복 제거를 위해 i 값으 다시 받기위해 마이너스 해서 다시 아웃 for 문으로 이동
					break;
				}
			}
		}

		
		int[][] arr = new int[5][5]; // 이차배열 함수로 구조를 나눠주고... 

		int index = 0; // 위 배열을 가져와야 함( 1차원 1 부터 25 값 가져와요)

		for (int i = 0; i < 5; i++) { // 행이 5까지 돌 동안 
			for (int j = 0; j < 5; j++) { // 열도 5까지 돌 동안 

				arr[i][j] = temArr[index++]; // 각각의 담을 숫자들을 하나씩 담아요~
				
				
			}
		}

		for (int i = 0; i < arr.length; i++) { // 5행 5 열 배열로 담기 위한 for 문과 출력문
			
			for (int j = 0; j < arr[i].length; j++) {
				
				System.out.printf("%4d", arr[i][j]);
			}
			System.out.println();
		}

		int count = 0; /// 정수 값을 받기 위해 변수를 세팅 
		
		System.out.println("===빙고게임시작===");

		while (true) {
			System.out.println("정수입력 : ");
			int num = sc.nextInt();
			sc.nextLine();

			count++; // 정수를 입력하는 횟수를 기록하기 위한것 

			for (int i = 0; i < 5; i++) { // 이중 for 문으로 각 행과 각 열을 확인하며 정수 비교
				for (int j = 0; j < 5; j++) {
					if (arr[i][j] == num) {
						arr[i][j] = 0; // 일치하는 번호 0으로 표기
					}

					System.out.printf("%4d", arr[i][j]); // 매칭이 되면 0 으로 표기하는 출력문 작성
				}
				System.out.println(); // 개행
			}

			System.out.println("게임을 끝내시겠습니까? (Y/N)"); 

			char ch = sc.nextLine().toUpperCase().charAt(0);
			if (ch == 'Y') {
				break; // 게임끝내서 for문을 나올 수 있게 
			}
			System.out.println(count + "번 입력");
		}

	}

'자바 한계단' 카테고리의 다른 글

자바 구성멤버 [메소드]  (0) 2021.09.27
자바 생성자 복습  (0) 2021.09.26
필드부 복습  (0) 2021.09.24
클래스 복습  (0) 2021.09.24
자바 객체 지향 프로그래밍  (0) 2021.09.24