본문 바로가기
언어/Java

Java 배열(5) 2차원 배열

by erase-jeong 2024. 9. 14.

1. 2차원 배열

테이블 형태의 데이터를 저장하기 위한 배열이다.

 

 

int [ ] [ ] score = new int[4][3]; //4행 3열의 2차원 배열을 생성한다.

 

 

 

 

cf. 3차원 배열

 

 


 

2. 2차원 배열의 인덱스

 

int [][] score=new int[4][3]; //4행 3열의 2차원 배열 score를 생성

 

 

score[0][0]=100; //배열 score의 1행 1열에 100을 저장
System.out.println(score[0][0]); //배열 score의 1행 1열의 값을 출력

 

 


 

3. 2차원 배열의 초기화

 

int [][] arr=new int[][]{{1,2,3},{4,5,6}};
int [][] arr={{1,2,3},{4,5,6}};  //new int[][] 가 생략됨

int[][] arr={

		{1,2,3},
        {4,5,6}
        
	};

 

-> 1차원 배열의 배열 형태이다.

 

 

 

 

int[][] score={
    {100,100,100),
    {20,20,20},
    {30,30,30},
    {40,40,40}
};

 

 

<2차원 배열 예제>

public class Ex5_8 {
    public static void main(String[] args){
        int[][] score={
                {100,100,100},
                {20,20,20},
                {30,30,30},
                {40,40,40}
        };
        int sum=0;

        for(int i=0;i<score.length;i++){
            for(int j=0;j<score[i].length;j++){
                System.out.printf("score[%d][%d]=%d%n",i,j,score[i][j]);

                sum+=score[i][j];
            }
        }

        System.out.println("sum="+sum);
    }
}

 

 

 

<예제 5-9>

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

        int[][] score={
                {100,100,100},
                {20,20,20},
                {30,30,30},
                {40,40,40},
                {50,50,50}
        };

        //과목별 총점
        int korTotal=0,engTotal=0,mathTotal=0;

        System.out.println("번호  국어 영어  수학  총점  평균 ");
        System.out.println("===============================");

        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("%3d",i+1);

            for(int j=0;j<score[i].length;j++){
                sum+=score[i][j];
                System.out.printf("%5d",score[i][j]);
            }

            avg=sum/(float)score[i].length; //평균 계산
            System.out.printf("%5d %5.1f%n",sum,avg);
        }
        System.out.println("===============================");
        System.out.printf("총점 : %3d %4d %4d%n",korTotal,engTotal,mathTotal);
    }
}

 

 

<예제 2>

String 2차원 배열

(~~)

 

 

문자열은 String 타입이다.

문자열은 문자가 나열되어 있는 것을 뜻한다.

그렇다면 String 과 char의 차이점은 무엇인가?

 

a, b, c와 같이 (하나의 ) 문자가 나열 된 것이 char[] 이다.

여러개의 문자(ex. ab, a, aced ) 가 나열된 것은 문자열 String 으로 다룬다.

 

자바에서는 문자열 String 클래스로 다룬다.

 


4. String 클래스

 

(1) String 클래스는 char[] 와 메서드(기능)을 결합한 것이다.

 

String클래스 = char[ ] + 메서드(기능)

 

(2) String클래스는 내용을 변경할 수 없다. (read only)


3. String클래스의 주요 메서드

메서드 설명
char charAt(int index) 문자열에 해당 위치(index)에 있는 문자를 반환한다.
int length() 문자열의 길이를 반환한다.
String substring(int from, int to) 문자열에서 해당 범위(from ~ to) 의 문자열을 반환한다.
boolean equals(Object obj) 문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false
char[ ] toCharArray( ) 문자열을 문자배열(char[ ] ) 로 변환해서 반환한다.

 

String str="ABCDE";
char ch=str.charAt(3);

 

index 0 1 2 3 4
문자 A B C D E

 

String str="012345";
String tmp=str.substring(1,4);
System.out.println(tmp);

 

결과 : 123

 

 

<예제>

public class Ex5_11 {
    public static void main(String[] args){
        //012345
        String str="ABCDE";
        char ch=str.charAt(4);
        String str2=str.substring(1,4);
        String str3=str.substring(1);
        String str4=str.substring(1,str.length());
        System.out.println("str : "+str);
        System.out.println("ch :  "+ch);
        System.out.println("str2 : "+str2);
        System.out.println("str3 : "+str3);
        System.out.println("str4 " +str4);
    }
}

 


5. Arrays로 배열 다루기

(1) 문자열의 비교와 출력 -  equals( ), toString( )

 

== 로 비교하면 안된다

Equals로 비교해야 한다.

import java.util.Arrays;

public class Ex5_12 {
    public static void main(String[] args){
        int[] arr={0,1,2,3,4};
        int[][] arr2D={{11,12},{21,22}};

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.deepToString(arr2D));

        String[][] str2D=new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
        String[][] str2D2=new String[][]{{"aaa","bbb"},{"AAA","BBB"}};

        System.out.println(Arrays.equals(str2D,str2D2));
        System.out.println(Arrays.deepEquals(str2D,str2D2));
    }
}

 


import java.util.Arrays;

public class Ex5_12 {
    public static void main(String[] args){
        int[] arr={0,1,2,3,4};
        int[][] arr2D={{11,12},{21,22}};

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.deepToString(arr2D));

        String[][] str2D=new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
        String[][] str2D2=new String[][]{{"aaa","bbb"},{"AAA","BBB"}};

        System.out.println(str2D==str2D2);
        System.out.println(str2D);
        System.out.println(str2D2);
        System.out.println(Arrays.equals(str2D,str2D2));
        System.out.println(Arrays.deepEquals(str2D,str2D2));
    }
}

 

 


 

(2) 배열의 복사 - copyOf( ), copyOfRange( )

int[] arr={0,1,2,3,4};
int[] arr2= Arrays.copyOf(arr,arr.length); //arr2=[0,1,2,3,4]
int[] arr3=Arrays.copyOf(arr,3); //arr3=[0,1,2]
int[] arr4=Arrays.copyOf(arr,7); //arr4=[0,1,2,3,4,0,0]
int[] arr5=Arrays.copyOfRange(arr,2,4); //arr5=[2,3] <--- 4는 불포함
int[] arr6=Arrays.copyOfRange(arr,0,7); //arr6=[0,1,2,3,4,0,0]

 

 

(3) 배열의 정렬 - sort( ) 

int[] arr={3,2,0,1,4};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));  //[0,1,2,3,4]

-> default : 오름차순 정렬

 

import java.util.Arrays;

public class Ex5_14 {
    public static void main(String[] args){
        int[] arr={3,4,1,0,2};
        System.out.println(Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        int[][] arr2D={{11,12},{21,22}}; //2차원 배열

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.deepToString(arr2D));

        String[][] str2D={{"ccc","bbb"},{"AAA","BBB"}};
        String[][] str2D2={{"aaa","bbb"},{"AAA","BBB"}};

        System.out.println(Arrays.deepEquals(str2D,str2D2));

    }
}