- 2차원 배열

배열 안에 배열이 있는 형태

 

 

- 2차원 배열의 선언

자료형[][] 배열명 = {
          {값1, 값2, ...}
          {값3, 값4, ...}
};

자료형[][] 배열명 = new [행수][열수]; // 열 수는 생략가능

 

정방 배열 : 각 행마다 칸수 (열의 개수)가 모두 같은 배열

비정방 배열 : 각 행마다 칸수 (열의 개수)가 다른 배열

 

 

- 배열의 길이

배열명.length : 옆에.(점) 찍힌 공간에 연결된 공간의 수를 의미한다.

 

2차원 배열 보충 설명

먼저 arrData에 주소가 할당되고, 그 안에 200,300 번지로 주소가 할당된 공간이 생긴다.

그리고 이 200, 300 번지의 공간에 3개의 공간이 생긴다.

그래서 20이라는 숫자를 찾아가고 싶으면 100번지에 생긴 200번지의 첫 번째로 찾아가면된다.


 

- 2중 for문 (nested for)

for문 안에 for문이 있는 형태

		int [][] arrData = {
			{10,20,30},
			{40,50,60}
		};

		for (int i =0; i < 2; i++) {
			for(int j =0; j < 3; j++) {
				System.out.println(arrData[i][j]);
			}
		}

 

바깥쪽에 있는 i for문은 다음 반복으로 넘어가기 위해서 안쪽에 있는 수행할 문장들을 모두 수행해야 한다.

즉, i for문이 다음 반복을 하기 위해서는 j for문이 종료되어야 한다는 것을 의미한다.

 

그 후 i for문은 다음 반복으로 넘어가게 되고 그때 수행할 문장은 다시 j for문을 처음부터 시작하는 것이 된다.

따라서 가장 안쪽에 있는 문장은 (i for문 반복 횟수) * (j for문 반복 횟수) 만큼 수행이 된다

 

 

- 기타 제어

continue : 다음 반복으로 넘어가기, 다음 반복으로 넘어가기 위한 과정들을 모두 수행하면서 넘어간다.

(for문 : 증감식, 조건식 비교 / while문 : 조건식 비교)

        for (int i=1; i<=10; i++) {
			if(i == 4) {
				continue; // 4을 출력하지 않음
			}
			System.out.println(i);
		}

아래쪽에 넘어갈만한 문장이 있을 때 사용한다.


위에 코드는 아래 코드로 대체가 가능하다.

		for (int i=1; i<=10; i++) {
			if(i == 4) {}
			else {
			System.out.println(i); 
			}
		}

 

- 메소드

이름 뒤에 소괄호 / 단, 키워드 뒤에 소괄호는 메소드가 아니다.

기능, 행위, 처리 등을 담당한다.

 

 

- 메소드의 사용 이유

  1. 반복되는 기능, 처리, 코드 등을 쉽게 관리하기 위해서
  2. 코드의 가독성을 위해서

 

 

- 메소드의 구조

(1) 리턴 타입 (2) 메소드명 ((3) 자료형 매개변수 1, 자료형 매개변수 2 ,...) {

(4) 호출 시 실행할 문장

(5) return 리턴 값

}

 

(1) 리턴 타입 : return 뒤의 값의 타입에 맞는 자료형을 작성해준다.

(2) 메소드명 : 동사형으로 작성한다.

(3) 자료형 매개변수 : 생략이 가능하다. 하지만 생략 시에는 외부(사용하는 곳)에서 값을 전달받을 수 없고, 여러 값을 전달받아야 할 때에는 , (콤마)로 구분하여 값의 개수만큼 선언해준다. 사용 시에는 매개변수의 타입과 개수에 맞게 순서대로 값을 전달해 주어야 한다.

(4) 호출 시 실행할 문장 : 생략이 가능하다. 호출하게 되면 내부로 흐름이 이동되어 안에 있는 문장들을 수행하게 된다.

(5) return 리턴 값 : 생략이 가능하다. 사용하는 부분 통째로를 뒤에 오는 값으로 덮어 씌운다.

 

 

- 메소드 선언 순서

예시 : 두 정수의 덧셈 메소드

 

1. 메소드 명을 생각한다. (목적성을 파악한다.)

: 덧셈 메소드 이기 때문에 이름은 add, 리턴 값이 정해지지 않았기 때문에 void 타입으로 선언한다.

void add () {

}

 

 

2. 매개 변수를 생각한다.

: 두 정수를 받아서 덧셈하기 때문에 int타입의 변수를 매개변수로 정해준다.

void add (int num1, int num2) {

}

 

 

3. 실행할 문장을 생각한다.

: 메소드의 시작 부분을 알리기 위해서 출력 하나와 연산을 해줄 코드와 리턴 값으로 결과를 넘겨준다.

void add (int num1, int num2) {
	System.out.println("두 정수의 덧셈 메소드");
	int result =  num1 + num2;
	return result;
}

 

 

4. 리턴 타입을 수정한다.

: 리턴 값이 int타입이기 때문에 void를 int로 바꿔준다.

int add (int num1, int num2) {
	System.out.println("두 정수의 덧셈 메소드");
    int result = num1 + num2;
    return result;
}

 


예제 문제로 실습하기!

 

1. 1~n 합을 구해주는 메소드

메소드 작성 및 결과 동영상
	int add(int num) {
		int result = 0;
		for (int i = 0; i <= num; i++) {
			result += i;
		}
		return result;
	}

 

 

2. 두 정수의 나눗셈 결과를 구해주는 메소드

메소드 작성 및 결과 동영상
	double divide(int num1, int num2) {
		// 나눗셈 결과가 실수일수도 있기 때문에 double로 선언
		double result = num1 / num2;
		return result;
	}

 

 

 

3. n부터 m까지의 합을 구해주는 메소드

 

메소드 작성 및 결과 동영상
	int sumNtoM(int n, int m) {
		int result = 0;
		for (int i = n; i <= m; i++) {
			result += i;
		}
		return result;
	}

 

 

 

4. 문자열 전부를 대문자로 바꿔주는 메소드 (hello -> HELLO)

메소드 작성 및 결과 동영상
	String changeToUpper(String msg) {
		String result = "";

		for (int i = 0; i < msg.length(); i++) {
			char ch = msg.charAt(i); // charAt는 문자하나하나로 가져온다.

			if (ch >= 'a' && ch <= 'z') {
				result += (char) (ch - 32); // ch-32인 이유는 a : 97이고, A: 65이기때문이다.
			} else {
				result += ch;
			}
		}
		return result;
	}

 

 

5. 문자열이 숫자로 이루어져 있는지 검사하는 메소드

메소드 작성 및 결과 동영상

 

	boolean isDigit (String msg) {
		for (int i = 0; i < msg.length(); i++) {
			char ch = msg.charAt(i);
			
			if (ch < '0' || ch > '9') {
				return false;
			}
		}
		
		return true;
	}

 

 

 

 

 

 

복사했습니다!