본문 바로가기

프로그래밍/Java

Java_배열(2)

① 배열의 활용 - 섞기 

import java.util.Arrays;
class Ex5_4{
	public static void main(String[] args){
    	int[] numArr={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println(Arrays.toString(numArr));
        
        for(int i=0; i<100;i++){
        	int n=(int)(Math.random()*10);
            int tmp=numArr[0];
            numArr[0]=numArr[n];
            numArr[n]=tmp;
        }
        System.out.println(Arrays.toString(numArr));
    }
}

- random()을 이용해서 배열의 임의의 위치에 있는 값과

배열의 첫 번째 요소 nummArr[0]의 값을 교환하는 일을 100번 반복해서 섞는다.

 

② String 배열의 생성과 초기화

- String[] str=new String[]; 과 같이 int형 배열의 선언과 생성 방법은 다르지 않다.

- String[] str=new String[] {"AA", "BB", "CC"};  //new String[]은 생략할 수 있다.

  str[1]="AA";

  str[2]="BB";

  str[3]="CC";

 

③ String클래스

- String객체(문자열)는 읽을 수만 있을 뿐 내용을 변경할 수 없다.

→ 변경 가능한 문자열을 다루려면, StringBuffer클래스를 사용하면 된다. 

 

④ String클래스의 주요 메서드

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

char ch=str.CharAt(3);	//문자열 str의 4번째 문자 'D'를 ch에 저장.
String tmp=str.substring(2,4);	//str에서 'CD'만 반환. (to는 포함 안 됨.)
if(str.equals("abcde")){	//str과 "abcde"의 내용이 같은지 확인함.
	...
}

 

⑤ 2차원 배열의 선언

- 2차원 배열을 선언하는 방법은 1차원 배열과 같다. 다만 대괄호[]가 하나 더 들어간다.

ex) int[][] score=new int[4][3];

score[0][0] score[0][1] score[0][2]
score[1][0] score[1][1] score[1][2]
score[2][0] score[2][1] score[2][2]
score[3][0] score[3][1] score[3][2]

 

⑥ 2차원 배열의 초기화

- 2차원 배열도 괄호{}를 사용해서 생성과 초기화를 동시에 할 수 있다.

다만, 1차원 배열보다 괄호{}를 한 번 더 써서 구분해 준다.

int[][] score=new int[][] {		// //new int[][] 생략 가능.
		{1,2,3}, 
    	{4,5,6} 
    };

→ 한 줄 보단 줄바꿈을 해주는 것이 보기도 좋고 이해하기 쉽다.

 

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);
    }
}
결과
번호    국어    영어    수학    총점   평균
==========================================
  1    100    100    100    300    100.0
  2     20     20     20     60     20.0
  3     30     30     30     90     30.0
  4     40     40     40    120     40.0 
  5     50     50     50    150     50.0
 ==========================================
 총점:   240    240    240

-new int[5][3]; 에서 [5]는 score.length이고 [3]은 socre[i].length이다. 

 

⑦ Arrays클래스의 유용한 메서드

- 배열의 비교와 출력 : equals(), toString()

toString() 배열의 모든 요소를 문자열로 출력한다. 
deepToString() 2차원 뿐만 아니라 다차원 배열을 출력한다.
equals() 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 flase를 반환한다.
deepEquals() 다차원 배열 비교에 사용한다.

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

copyOf() 배열 전체를 복사해서 새로운 배열을 만들어 반환한다.
copyOfRange() 배열의 일부를 복사해서 새로운 배열을 만들어 반화나한다.

→ 늘 그렇듯이 copyOfRange()에서 범위를 지정할 때 지정된 범위의 끝은 포함되지 않는다. 

 

- 배열의 정렬 : sort() 

sort() 배열을 오름차순으로 정렬할 때 사용한다.