
- 2차원 배열
배열 안에 배열이 있는 형태
- 2차원 배열의 선언
자료형[][] 배열명 = {
{값1, 값2, ...}
{값3, 값4, ...}
};
자료형[][] 배열명 = new [행수][열수]; // 열 수는 생략가능
정방 배열 : 각 행마다 칸수 (열의 개수)가 모두 같은 배열
비정방 배열 : 각 행마다 칸수 (열의 개수)가 다른 배열
- 배열의 길이
배열명.length : 옆에.(점) 찍힌 공간에 연결된 공간의 수를 의미한다.

먼저 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) 메소드명 ((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;
}
'WEB > JAVA' 카테고리의 다른 글
DAY 08 : this, 클래스 배열, 정적 필드 (0) | 2022.01.04 |
---|---|
DAY 07 : 저장 기억 부류, 클래스, 생성자 (0) | 2022.01.04 |
DAY 05 : 반복문, 배열 (0) | 2022.01.03 |
DAY 04 : 조건식, 삼항 연산자, 조건문 (0) | 2022.01.03 |
DAY 03 : 입력, 형변환, 연산자 (0) | 2022.01.03 |