티스토리 뷰
👉 String 배열
1. String 배열의 선언/생성/초기화
String[] str = new String[3]; //3개의 문자열을 담을 수 있는 배열 생성
✔ String 배열의 선언과 생성도 다른 자료형의 선언, 생성 방법과 다르지 않다.
✔ String 배열은 별도의 초기화를 하지 않으면 null로 자동 초기화된다.
String[] name = new String[2];
name[0] = "짱구";
name[1] = "치타";
String[] address = new String[2] {"서울", "제주"};
String[] className = {"해바라기반", "장미반"};
✔ 초기화도 일반 변수와 마찬가지이다.
✔ 첨자를 사용해 하나하나의 요소에 저장된 값을 초기화할 수 있다.
✔ 선언/생성과 함께 중괄호를 사용해 초기화할 수 있으며, 이 경우 생성부를 생략할 수 있다.
System.out.println(className);
System.out.println(className[0]);
System.out.println(className[1]);
✔ String 배열명을 출력하면, 객체의 주소가 저장되어 있음을 확인할 수 있다.
✔ 일반 자료형 배열이 아니라 참조형 배열의 경우, 배열에 저장되는 것은 객체의 주소이다.
✔ 참조 배열의 이름에는 배열에게 할당된 메모리의 주소를 저장한다.
✔ 참조 배열의 요소들은 문자열이 저장된 메모리의 주소를 저장하고, 이를 참조하여 문자열에 접근한다.
✔ 참조형 배열을 객체 배열이라고도 부르며, 이는 6장에서 다시 공부할 예정이다.
2. char 배열과 String 클래스
✔ 문자를 연속적으로 저장하는 char배열과, String타입의 변수 즉 문자열은 사실 같은 의미이다.
✔ 자바에서 String 클래스를 사용해 문자열을 처리하는 이유는 더 많은 기능을 가지고 있기 때문이다.
✔ 여기서의 기능은 함수, 즉 메서드를 의미한다.
String str = "Java";
System.out.println(str); //Java
str = str + "8"
System.out.println(str); //Java8
✔ char배열과 String 클래스의 가장 중요한 차이는, String 객체는 내용을 변경할 수 없다는 점이다.
✔ 위의 코드를 살펴보면 값을 수정한 것처럼 보이지만, 새로운 문자열을 생성해 str에 저장한 것이다.
메서드 | 설명 |
char charAt(int idx) | 문자열에서 해당 index의 문자를 반환 |
int length( ) | 문자열의 길이를 반환 |
String substring(int from, int to) | 범위에 해당하는 문자열을 반환 (to는 범위에 포함되지 X) |
boolean equals(String str) | 문자열의 내용이 같은지 확인. 같다면 true, 다르다면 false를 반환 |
char[ ] toCharArray( ) | 문자열을 char 배열로 변환해서 반환 |
// String 클래스와 char배열의 변환
char[] arr = { 'A', 'B' };
String str = new string(arr); // char배열 → String
char[] tmp = str.toCharArray(); // String → char배열
✔ String클래스의 메서드 중 기본적인 것들만 기억해두자.
3. 커맨드 라인을 통해 입력받기 (명령행 인자)
public static void main( String args[] )
✔ String args [ ]는 명령행 인자를 커맨드 라인을 통해 입력받을 수 있음을 의미한다.
✔ main함수 내부에서 args [0], args [1]... 와 같은 방식으로 전달받은 문자열에 접근할 수 있다.
c:\jak1.8\work\test > java Ex MainTest abc 123
✔ 명령행 인자는 커맨드 라인을 통해 프로그램을 실행할 때에 같이 입력한다.
✔ 파일의 확장자 java 파일명 Ex를 순서대로 입력하고 그 이후에 명령행 인자를 입력한다.
✔ 입력받은 명령행 인자는 모두 문자열로 저장되므로, 정수로 바꾸어 사용하고 싶다면 형 변환이 필요하다.
✔ 띄어쓰기가 포함된 문자열을 입력하고 싶다면 큰따옴표로 감싸주자.
//c:\jak1.8\work\test > java Ex Maintest abc 123
public class Main {
public static void main(String args[]) {
int i=0;
while(args[i]!=null){
System.out.println(args[i]);
i++;
}
}
}
✔ 몇 개의 명령행 인자를 가지는지 알지 못한다는 가정하에 위와 같은 코드를 짜서 출력해보았다.
✔ args [i]가 null인 경우 반복을 멈추고 while문을 빠져나온다.
✔ 다만 이 경우, args가 가지는 크기를 벗어나기 때문에 오류가 발생한다.
👉 다차원 배열
1. 2차원 배열의 선언과 인덱스
int[][] arrA ;
int arrB[][] ;
int[] arrC[] ;
✔ 2차원 배열은 1차원 배열보다 대괄호가 하나 증가한다.
int[][] arr = new int[4][3];
✔ 4행 3열의 데이터를 담기 위한 배열을 생성하고자 한다면 위와 같이 사용한다.
✔ 말하자면 2차원 배열의 생성은 4행 3열의 표를 만드는 것과 같다.
int[ ][ ] arr = new int[4][3]; | ||
int[0][0] | int[0][1] | int[0][2] |
int[1][0] | int[1][1] | int[1][2] |
int[2][0] | int[2][1] | int[2][2] |
int[3][0] | int[3][1] | int[3][2] |
✔ 요소를 사용하기 위해서는 행과 열을 통해 좌표를 구하듯 위와 같이 접근해야 한다.
2. 2차원 배열의 초기화
//4행 3열
int[][] arrA = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
int[][] arrB = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
{ 10, 11, 12 }
};
✔ 각 요소를 하나하나 첨자를 사용하여 초기화할 수도 있고, 선언과 동시에 중괄호를 사용해 초기화할 수도 있다.
✔ arrA처럼 한 줄로 써주어도 문제는 없지만, 쉽게 이해할 수 있도록 arrB처럼 개행하면서 초기화해주도록 하자.
int[][] arr = new int[4][3];
int num = 0;
for(int i=0; i<4; i++){
for(int j=0; j<3; j++){
arr[i][j] = num++;
System.out.print(arr[i][j]+" ");
}System.out.println();
}
✔ for문을 사용해 2차원 배열 요소를 사용할 수 있지만, 행과 열을 모두 다루어야 하므로 2중 for문을 사용하자.
✔ 위의 코드에서는 i는 행의 첨자로 사용되고, j는 열의 첨자로 사용된다.
✔ 콜론 for문은 배열의 값을 읽어올 수는 있지만, 배열에 저장된 값을 변경할 수 없으니 주의하자.
int[][] arr = new int[4][3];
int num = 0;
for(int i=0; i<arr.length; i++){
for(int j=0; j<arr[0].length; j++){
arr[i][j] = num++;
System.out.print(arr[i][j]+" ");
}System.out.println();
}
✔ 배열의 길이를 활용해서 위와 같이 조건식을 수정해 사용할 수 있다.
✔ 2차원 배열명에 length를 사용해 배열의 길이를 구하면, 1차원 배열의 개수를 반환한다.
✔ arr [0]은 1차원 배열을 의미하므로, arr [0]에 length를 사용해 길이를 구하면 열의 개수를 반환한다.
3. 가변 배열
int[][] arr = new int[4][ ];
arr[0] = new int[5];
arr[1] = new int[2];
arr[2] = new int[4];
arr[3] = new int[1];
✔ 2차원 이상의 배열을 선언 및 생성할 때에 행의 길이는 필수로 지정해야 한다
✔ 열의 길이는 부분 배열명을 통해 각각 생성할 수 있다.
✔ 이처럼 열의 길이를 다르게 가질 수 있는 2차원 이상의 배열을 가변 배열이라고 한다.
int[][] arr = {
{ 1, 2, 3, 4, 5 },
{ 6, 7 },
{ 8, 9, 10, 11 },
{ 12 }
};
✔ 초기화의 방법은 동일하나, 열의 개수가 다르므로 주의해서 초기화하자.
✔ 선언과 동시에 초기화할 때에는 생성부 생략 가능.
4. 다차원 배열의 활용
✔ 아래의 예제들을 통해 다차원 배열을 활용해보자.
✔ 이번에도 키워드를 보고 예제를 새롭게 만들어봤다.
//좌표에 X하기
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
char[][] arr = new char[6][6];
//모든 요소를 O로 초기화
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[0].length; j++) {
arr[i][j]='O';
}
}
//입력 횟수 입력받기
System.out.print("> 좌표 입력 횟수 입력\t");
int n = sc.nextInt();
//n번씩 좌표 입력받고 입력받은 좌표의 요소를 X로 초기화
int x, y;
for(int i=0; i<n; i++) {
System.out.print("> "+(i+1)+"번째 좌표 입력\t");
x = sc.nextInt();
y = sc.nextInt();
if(x>arr.length || y>arr[0].length) {
System.out.println("> 잘못된 입력입니다. 입력을 종료합니다");
break;
}
arr[x][y]='X';
}
//출력
System.out.println("\n\t"+0+"\t"+1+"\t"+2+"\t"+3+"\t"+4+"\t"+5);
for(int i=0; i<arr.length; i++) {
System.out.print(i+"\t");
for(int j=0; j<arr[0].length; j++) {
System.out.print(arr[i][j]+"\t");
}System.out.println();
}
}
}
//단어 맞추기
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String[][] arr = {
{"book", "책"},
{"cup", "컵"},
{"computer", "컴퓨터"}
};
for(int i=0; i<arr.length; i++) {
System.out.print("> "+arr[i][0]+"의 뜻은?\t");
String str = sc.nextLine();
if(arr[i][1].equals(str)) {
System.out.println("> 정답입니다.");
}else {
System.out.println("> 오답입니다.");
System.out.printf("> 정답은 %s입니다.\n", arr[i][1]);
}
}
}
}
✔ 문자열을 비교하기 위해서는. eqauls( ) 함수를 사용해야 한다.
[참고] 자바의 정석
'BackEnd > JAVA' 카테고리의 다른 글
static, final (0) | 2021.10.26 |
---|---|
싱글톤 패턴(SingleTone Pattern) (0) | 2021.10.25 |
[Ch.05] 1. 배열 (0) | 2021.03.11 |
[Ch.04] 조건문과 반복문 (0) | 2021.03.05 |
[Ch.03] 5. 기타 연산자 (0) | 2021.02.28 |