자바의 정석 2회독 중이다 몰랐던 부분이나 한번 더 짚고갈 내용을 정리해보려고 한다.
1. 조건문
1-1. if문
if문은 가장 기본적인 조건문이며. '조건식'과 괄호'{}' 로 이루어져 있다.
if ( 조건식 ) {
조건식이 참(true)일 때 수행될 문장들을 적는다.
}
if문에 사용되는 조건식은 일반적으로 비교연산자와 논리 연산자로 구성된다.
비교 연산자들은 == > < >= <= 처럼 대소 비교를 하는 연산자이고
논리연산자 는
&&(AND): 둘다 참일때에만 참, 하나라도 거짓이면 거짓
||(OR) : 하나라도 참이면 참, 둘 다 거짓일때만 거짓
!(NOT) : 참이면 거짓으로, 거짓이면 참
이와 같다.
1-2. if - elseif - else문
처리해야할 경우의 수가 셋 이상인 경우 쓰게되는 구문이다.
if (조건식1) {
조건식1의 연산결과가 참일 때 수행될 문장
} else if (조건식2) {
조건식2의 연산결과가 참일 때 수행될 문장
} else if (조건식3) {
조건식3의 연산결과가 참일 때 수행될 문장
} else { 마지막은 보통 else로 끝나지만 필요에 따라 생략가능하다.
위의 어느 조건식도 만족하지 않을때 수행될 문장
}
1-3. 중첩 if 문
if문 블럭 내에 또 다른 if문을 포함시키는 것이 가능하다. 이를 중첩 if 문으로 부르고 중첩의 횟수에는 제한이 없다.
if(조건식1){
if(조건식2){
}else{
}
}
1-4. switch 문
if문은 조건식의 결과가 참과 거짓, 두가지 뿐이라 경우의 수가 많아지게 되면 else if 를 계속 추가해야해 조건식이 많아져 복잡해진다.
switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 갈결하여 알아보기 쉽다.
<switch문의 순서>
1. 조건식을 계산한다.
2. 조건식의 결과와 일치하는 case 문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
조건식의 결과와 일치하는 case문이 없을 경우 default 문으로 이동하게되는 구조이다.
switch문의 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
변수나 실수, 문자열은 case문의 값으로 사용할 수 없다.
2. 반복문
2-1. for문
for문은 반복 횟수를 알고 있을 때 적합하다.
for문은 '초기화', '조건식', '증감식', '블럭{}' 4부분으로 이루어져 있으며, 조건식이 참인 동안 블럭{}내의 문장들을 반복하다 거짓이 되면 반복문을 벗어난다.
1부터 5까지 1씩증가
for(int i = 1; i<=5; i++){
System.out.println("Yes I Can Do!");
}
실행시 출력문의 문장이 5회 반복된다.
초기화
반복문에 사용될 변수를 초기화하는 부분이며 처음 한번만 수행도니다.
둘 이상의 변수가 필요할 때는 콤마 ' , ' 를 구분자로 변수를 초기화하면 된다.
for(int i=1; i<10; i++){...} 변수 i의 값을 1로 초기회해준다.
for(int i=1, j=0; i<10; i++){...} int타입의 변수 i와 j를 선언하고 초기화
조건식
조건식의 값이 참(true)면 반복을 계속하고, 거짓(false)이면 반복을 중단하고 for문을 벗어난다.
for(int i =1; i <=10; i++){...} i<=10인동안 블럭{ }안의 문장 반복
증감식
반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식
매 반복마다 변수의 값이 증감식에 의해서 점진적으로 변하다가 결국 조건식이 거짓이 되어 for문을 벗어나게 된다.
for(int i =1; i <=10; i++){ ... } i가 1씩 증가
for(int i =10; i >=1; i--){ ... } i가 1씩 감소
for(int i =1; i <=10; i+=2){ ... } i가 2씩 증가
for(int i =1; i <=10; i*=3){ ... } i가 3배씩 증가
증감식도 쉼표를 이용하여 두 문장 이상을 하나로 연결해서 쓸 수 있다.
for(int i=1, j=10; i<10; i++, j--){ ... }
2-2 향상된 for문
jdk 1.5 부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문에 새로운 문법이 추가 되었다.
for( 타입 변수명 : 배열 또는 컬렉션) {
반복할 문장
}
위의 문장에서 타입은 배열 또는 컬렉션의 요소의 타입이어야 한다.
배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다. 그리고 반복문의 괄호{}내에서는 이 변수를 사용해서 코드를 작성한다.
int[] arr = {10,20,30,40,50};
배열을 위와 같이 선언했을 때, 이 배열의 모든 요소를 출력하는 for문은 두가지가 있다.
<기존의 for문>
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
<향상된 for문>
for(int tmp : arr) {
System.out.println(tmp);
}
두 for문은 출력값이 동일하다. 향상된 for문이 코드가 간결하지만, 향상된 for문은 일반 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.
<예시>
public static void main(String[] args) {
int [][] arrScore = {
{10, 20, 30},//1번
{11, 25, 39},//2번
{12, 26, 38},//3번
{13, 27, 37},//4번
{14, 28, 36}//5번
};
int total = 0;
double avg = 0.0;
//각 학생별 총점과 평균 출력하기
//빠른 for문으로
int cnt = 0;
for(int[] arScore : arrScore) {
total = 0;
cnt++;
for(int score : arScore) {
total += score;
}
System.out.println(cnt+"번 총점 : "+total+"점");
avg = Double.parseDouble(String.format("%.2f", (double)total/arScore.length));
System.out.println(cnt+"번 평균 : "+avg+"점");
}
}
2-3. while문
while문은 조건식이 '참(true)인 동안' 블럭{}내의 문장을 반복한다.
while (조건식) {
조건식의 연산결과가 참인동안, 반복될 문장들을 적는다.
}
따라서 while문의 조건식이 거짓이되거나 break문이 있어야 while문을 빠져나올 수 있다.
2-4 do-while문
do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{ }의 순서를 바꿔놓은 것이다.
while문과 반대로 do블럭{ }을 먼저 수행한 후에 조건식을 평가한다.
while문은 조건식의 결과에 따라 블럭{ }이 한번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것을 보장한다.
do {
조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while (조건식);
<예시>
int i = 0;
do{
System.out.println("Hi + " + i);
i++;
}while(i<5);
<출력결과>
Hi + 0
Hi + 1
Hi + 2
Hi + 3
Hi + 4
2-5 break문
break문은 특정 조건을 만족하면 반복문을 벗어나도록 하는 키라고 생각하면 된다.
보통 무한 반복문에서 break를 사용하며 사용하지 않게되면 무한으로 반복문이 실행되어 프로그램이 종료되지 않는다.
int i = 0
while(true){
if(i>50){ i가 50을 넘게되면 while문을 종료한다.
i++;
break;
}
}
2-6 continue문
continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되중 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.
continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과 다르다.
주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행되도록 한다.
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하다.
<예시>
for(int i=0; i<10; i++){
for(int i=0; i<=10; i++){
if(i%3==0){continue;}
// 3의 배수인것은 제외한다.
}
}
출력결과
1
2
4
5
7
8
10
2-7 이름 붙은 반복문
break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러개의 반복문의 중첩된 경우 break문으로 중첩 반복문을 완전히 벗어날 수 없다. 이때는 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너 뛸 수 있다.
<예시>
public class LoofTest
{
public static void main(String[] args)
{
Loop1 : for(int i=2; i<=9; i++) // 임의로 Loof1 이라고 이름을 붙여서 사용
{
for(int j=1; j<=9; j++)
{
if(j==5)
break Loop1;
//break;
//continue Loop1;
//continue;
System.out.println(i+"*"+j+"="+i*j);
}
System.out.println("===");
}
}
}
// Loof1 을 사용할 경우와 사용하지 않을 경우의 결과가 다르다.
// 각각의 결과는 주석을 지워서 하나씩 확인해 보면 된다.
<결과>
2*1=2
2*2=4
2*3=6
2*4=8
'JAVA > 자바의정석' 카테고리의 다른 글
자바(JAVA) : 배열(array) (1) (0) | 2022.03.29 |
---|---|
자바(JAVA) - 컬렉션 프레임워크(Collection Framework) : ArrayList, LinkedList (0) | 2022.02.01 |
자바(JAVA) - java.lang 패키지 (4) : 유용한클래스 (0) | 2022.01.19 |
자바(JAVA) - java.lang 패키지 (3) : Math클래스 (0) | 2022.01.18 |
자바(JAVA) - java.lang 패키지 (2) : String 클래스 (0) | 2022.01.17 |