티스토리 뷰

👉  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
댓글
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
최근에 올라온 글
글 보관함
Total
Today
Yesterday