본문 바로가기
멀티캠퍼스 풀스택 과정/Java의 정석

자바의 정석1-8 배열들(String, 2차원)과 클래스(String, Arrays)

by 이쟝 2021. 12. 30.

String 배열

String str = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성

 

String 은 참조형이기 때문에 참조형의 기본값인  null 이 들어감
각 자료형의 기본값

name[0] = “kim”;

name[1] = “park”;

name[2] = “yi”;

 

String[ ] name = { “kim”, “park”, “yi” };

-> 위코드와 아래 코드는 같은 표현!

 

-> 실제로 문자가 만들어지고 문자가 들어가는 게 아닌 문자의 주소가 배열안에 들어가진다!


예제) strArr에 가위바위보 배열을 삽입한 다음 난수생성해서 출력!

 

String[] strArr = {"가위", "바위", "보"};

for(int i =0; i<strArr.length;i++) {
	int tmp = (int)(Math.random()*3); //0~2=(strArr index와 맞추기)
	System.out.println(strArr[tmp]);
}

2차원 배열

- 테이블 형태의 데이터를 저장하기 위한 배열이고 1차원 배열이 여러 개 모인 게 2차원 배열

) (한 행이 1차원 배열)하나가 2차원 배열 표(2차원배열)이 여러 개 모인 것이 3차원 배열

int[ ][ ] score = new int[4][3];  // 4행 3열2차원 배열()을 생성 -> 12개의 저장공간 필요

 

2차원 배열의 인덱스

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

 

score[0][0] = 100;  // 배열 score11100을 저장

System.out.println(score[0][0]);  // 배열 score11열의 값을 출력

 

2차원 배열의 초기화

1) int[ ][ ] arr = new int[ ][ ]{ {1, 2, 3}, {4, 5, 6} }; -> 잘 쓰지는 않음

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

3) int[ ][ ] arr = {

              {1, 2, 3},   -> 1차원 배열(arr[0])

              {4, 5, 6}   -> 1차원 배열(arr[1])

             };

-> 가능한 3번처럼(직관적이기 때문)


2차원 배열 예제

int[ ][ ] score = {

               {100, 100, 100},

               {20, 20, 20},

               {30, 30, 30},

               {40, 40, 40}

};

 

score 배열의 내부

예제1) 출력값나오게 작성

출력값(모든 배열을 다 더하기)

 

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++) { //score.length -> 몇행? 4행!
	for(int j=0; j<score[i].length; j++) {  // 3열
		System.out.printf("score[%d][%d]=%d%n",i,j,score[i][j]);			        
        sum += score[i][j];
	}
}
System.out.println("sum=" + sum);

 

예제2) 과목별 점수를 통해 총점, 평균을 구해 표형태로 출력하기

<출력값>

번호    국어    영어    수학    총점    평균

===========================

  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   

 

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("번호\t국어\t영어\t수학\t총점\t평균");
System.out.println("=============================================");
		
for(int i = 0; i<score.length; i++) {
	int sum = 0;   // 개인별 총점
	float avg = 0f; // 개인별 평균
	// 과목별 합
	korTotal += score[i][0]; //korTatal = 100 + 20 + 30 + 40 + 50
	engTotal += score[i][1]; //engTotal = 100 + 20 + 30 + 40 + 50
	mathTotal += score[i][2]; //mathToatal = 100 + 20 + 30 + 40 + 50
			
	//번호를 3개 자리를 차지하며 출력하는 부분
	System.out.printf("%3d", i+1); //번호 출력 행이 0부터 시작하기 때문에 +1
        
        // 개인별 총합
	for(int j=0; j<score[i].length; j++) { 
		sum += score[i][j];
		System.out.printf("\t%d", score[i][j]); //tap만큼 띄우기
	}
			
	avg = sum / (float)score[i].length; //과목이 3개이기 때문에(3열) 
	System.out.printf("\t%d \t%.1f%n", sum, avg);
}
System.out.println("=============================================");
System.out.printf("과목별총점: %d \t%d \t%d%n", korTotal, engTotal, mathTotal);

String 클래스

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

string클래스 = char[ ] + 메서드(기능)  ->char[ ] : 문자배열

 

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

String a = "a";

String b = "b";

a = a + b;

System.out.println(a); //ab

 

String클래스의 주요 메서드

 

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

 

1) charAt 지정한 문자를 출력

String str = “ABCDE”;

char ch = str.charAt(3);  // 문자열 str4번째 문자 ‘D’ch에 저장

 

2) length 문자열의 길이를 출력

String str = “ABCDE”;

str.length( ) // 5

 

3) substring 문자열의 일부를 출력

String tmp = str.subString(1,3) // str에서 index범위 1~2문자들을 반환

System.out.println(tmp);  // “BC”이 출력됨

 

더보기
더보기

//charAt

String str = "ABCDE";

char ch = str.charAt(2);

System.out.println(ch);  //C

              

//substring

String str2 = str.substring(1,4);

String str3 = str.substring(1);  //(1, str.length())

System.out.println(str2);  //BCD

System.out.println(str3);  //BCDE


Arrays 클래스

-> Arrays클래스는 배열을 사용하는데 유용한 메소드 제공!

 

1) 배열의 비교와 출력 – equals( ), toString( )

-> 1차원 배열일 때는 toString, 2차원이나 다차원 배열일 때는 deepToString

-> 1차원 배열일 때는 equals, 2차원이나 다차원 배열일 때는 deepEquals

 

int[] arr = {0,1,2,3,4};
int[][] arr2D = { {11, 12}, {21, 22} };
		
System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); //[[11, 12], [21, 22]]

String[][] str2D = new String[][] {{"aaa","bbb"},{"AAA","BBB"}};
String[][] str2D2 = new String[][] {{"aaa","bbb"},{"AAA","BBB"}};
		
System.out.println(Arrays.equals(str2D, str2D2));  //false 2차원 배열이어서
System.out.println(Arrays.deepEquals(str2D, str2D2)); //true

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

 

int[] arr = {0,1,2,3,4};
//배열 arr에서 지정한 값 만큼 복사한다!
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [01234]
int[] arr3 = Arrays.copyOf(arr, 3); // arr3 = [012]
int[] arr4 = Arrays.copyOf(arr, 7); // arr4 = [0123400] -> 범위 벗어나면 0값으로 채움
		
//배열 arr에서 일정한 범위 까지 from ~ to 
int[] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5 = [23]
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6 = [0123400]

 

3) 배열의 정렬 – sort( )

 

int[] arr= {3, 2, 0, 1, 4};
Arrays.sort(arr); // 배열 arr을 정렬한다.(오름차순)
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]

 

2021.12.30 - [멀티캠퍼스 풀스택 과정/Java의 정석] - 자바의 정석-7 배열