자바 학습 & 복습 7일차 - array 이차원 배열

728x90

2차원 배열 인덱스 개념

public class Daily_Tstory {

	public static void main(String[] args) {

		//2차원 배열의 인덱스
		int[][] i = new int[3][3];
		i[2][2] = 3;
		int result = i[2][2]; //3까지 배열의 길이를 지정했으므로 2까지 출력 가능
		
		System.out.println(i[2][2]);
		System.out.println(result);
		
		int[][] j = {{1,2,3},{4,5,6}}; //2차원 배열은 {{}}를 씀으로써 배열 구분
		int [][] k = {
						{1,2,3},
						{4,5,6}
						}; // 2차원 배열의 가독성을 위해 위의 형식으로 많이 씀
		System.out.println(j[0][2]); 
		
		//2차원 배열의 길이 지정, 값 배정 후 총합계 출력하는 예시
		int[][] i = new int[5][5];
		int sum = 0;
		
		for(int j = 0; j<i.length; j++) {
			for(int k = 0; k<i[j].length; k++) {
				i[j][k]=k+1;
				System.out.printf("i[%d][%d] = %d%n", j, k, i[j][k]);
				sum += i[j][k];
			}
		}
		System.out.println(sum);
   }
}

 

2차원 배열 예시문제

public class Daily_Tstory {

	public static void main(String[] args) {
		//4명의 학생의 총점과 평균을 구하는 예시
		// 국 영  수
		// 40 70 50
		// 80 100 95
		// 60 78 79
		// 89 99 82
		int[][] score = {
						{40,70,50},
						{80,100,95},
						{60,78,79},
						{89,99,82}
						};
		
		System.out.println("번호  국어  영어  수학  총점  평균");
		System.out.println("============================");
		int kscore = 0, escore = 0, mscore = 0;
		int sum = 0;
		float ave = 0.0f;
		
		for(int i=0; i<score.length; i++) {
						
			kscore += score[i][0];
			escore += score[i][1];
			mscore += score[i][2];
			System.out.printf("%2d",(i+1)); //정수가 3보다 작으면 오른쪽 채워지는 식
			
			for(int j=0; j<score[i].length; j++) {
				
				sum +=score[i][j];
				ave =sum/score[i].length;
				System.out.printf("%5d",score[i][j]);
			}
			System.out.print("   "+sum);
			System.out.println(" "+ave);
			sum = 0;
		}
		System.out.print("총점: ");
		System.out.printf("%3d %4d %4d%n",kscore,escore,mscore);
	}
}

출력문:

번호  국어  영어  수학  총점  평균
============================
 1   40   70   50   160 53.0
 2   80  100   95   275 91.0
 3   60   78   79   217 72.0
 4   89   99   82   270 90.0
총점: 269  347  306

 

2차원 배열 예시문제2

import java.util.Scanner;

public class Daily_Tstory {

	public static void main(String[] args) {

		//2차원 배열을 만들어서 해당 배열의 문제 답안이 같으면 O 틀리면 X
		
		String[][] str = {	{"chair","의자"}
							,{"desk","책상"}
							,{"coffee","커피"}};
		
		Scanner scanner = new Scanner(System.in);
		
		for(int i=0; i<str.length; i++) {
			System.out.println("다음"+str[i][0]+"의 한국말은 무엇일까요?");
			String input = scanner.nextLine(); //입력받은 String 타입을 input으로 저장
			
				if(input.equals(str[i][1])) //입력받은 input 변수가 array에 할당된 값[?][1]과 같으면 O 틀리면 X
					System.out.println("O");
				else
					System.out.println("X");
		}
	}
}

출력문:

다음chair의 한국말은 무엇일까요?
as
X
다음desk의 한국말은 무엇일까요?
책상
O
다음coffee의 한국말은 무엇일까요?
커피
O

2차원 배열 Arrays 사용

 

Arrays.toString

Arrays.deepToString

Arrays.equals()

Arrays.deepEquals()

Arrays.copyOf()

Arrays.copyOfRange()

Arrays.sort()

import java.util. Arrays;

public class Daily_Tstory {

	public static void main(String[] args) {


		//Arrays Method로 array 다루기
		int[] array = {1,2,3};
		int[][] arr2d = {{1,2,3},{4,5,6}};
		
		System.out.println(Arrays.toString(array)); //1차원 배열은 Arrays.toString
		System.out.println(Arrays.deepToString(arr2d)); //2차원 배열은 Arrays.deepToString 사용
		
		String[][] str = {{"a"},{"b"}};
		String[][] str2 = {{"a"},{"b"}};
		
		System.out.println(Arrays.equals(str, str2)); // false 1차원 배열만 사용 가능
		System.out.println(Arrays.deepEquals(str, str2)); // true 2차원(or 다차원) 배열은 Arrays.deepEquals사용
		
		//배열의 복사
		//Arrays.copyOf & Arrays.copyOfRange
		
		int[] arr = {0,1,2,3,4,5};

		int[] arr2 = Arrays.copyOf(arr, 3); // = 0,1,2 |0~3까지 복사
		System.out.println(Arrays.toString(arr2));
		
		int[] arr3 = Arrays.copyOfRange(arr, 1, 7);
		System.out.println(Arrays.toString(arr3)); // = 1,2,3,4,5,0 (1부터 7까지라는 의미. 다만 arr변수는 6까지밖에 없으므로 7은 0으로 대체)
		
		
		//배열의 정렬
		//sort()
		
		int[] Arr = {3,1,6,4,2};
		Arrays.sort(Arr); // 먼저 Arrays.sort()로 정렬해주고
		System.out.println(Arrays.toString(Arr)); //[1,2,3,4,5,6]
		//Arrays.toString으로 출력
		
		
		
		}
}

 

Arrays 연습문제

import java.util. Arrays;

public class Daily_Tstory {

	public static void main(String[] args) {

		//array에 담긴 모든 값 합산하기
		int[] arr = {10,20,30,40,50};
		int sum = 0;
		
		for(int i=0; i<arr.length; i++) {
			sum +=arr[i];
			System.out.println(sum);
		}
		
		2차원 array의 모든 값의 총합과 평균을 구하기
		
		int[][] arr = {	{5,5,5,5,5},
						{10,10,10,10,10},
						{20,20,20,20,20},
						{30,30,30,30,30}
						};

		int total = 0;
		float ave = 0.0f;
		int count = 0;
		
		for(int i=0;i<arr.length;i++) {
			
			for(int j=0; j<arr[i].length;j++) {
				
				count++;
				total += arr[i][j];
				ave = total / (float)count;
				System.out.print(total);
				System.out.println(" "+(Math.round(ave*10)/10.0));
			}
		}
		
		//1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램
		
		int[] ball = {1,2,3,4,5,6,7,8,9};
		int[] ball3 = new int [3];
				
		for(int i = 0; i<ball.length; i++) {
			int tem = (int)(Math.random()*ball.length);
			int empty = 0;
			
			empty = ball[0]; //빈 변수에 자리[0]값을 할당항
			ball[0]=ball[tem];//자리[0]에 랜덤 값을 할당
			ball[tem] = empty; // 랜덤변수에 미리 저장해놓은 자리[0]값을 재할당
			
			System.out.println(Arrays.toString(ball));
		}
		//배열 ball 0~3의 자리수를 복사
		ball3=Arrays.copyOf(ball, 3);
		
		for(int j=0; j<3; j++) {
		System.out.println(ball3[j]);
		}
		
        
        
		
	}
}

 

 

728x90