출처 : 자바의 정석
http://www.yes24.com/Product/Goods/24259565
https://cafe.naver.com/javachobostudy/20665
아래의 내용은 '자바의 정석'이라는 책의 내용을 간략하게 정리한 글입니다.
조건문과 반복문(if, switch, for, while statement)
조건에 따라 다르게 수행되어야 할 문장이나 특정 문장을 반복해야 할 때 사용하는 문법
조건문은 if 문과 switch 문 두 가지가 있으며 처리할 경우의 수가 많을 때 switch가 효율적이나 switch는 if문 보다 제약이 많음.
1-1. if
조건식에 따라 수행하는 문장이 다르다.
if(조건식 1){
//조건식1 참일 경우 수행되는 문장
}else if(조건식 2) {
//조건식 2 참일 경우 수행되는 문장
}else {
//위 조건식들이 거짓일 경우 수행되는 문장
}
1-2. switch
조건식을 먼저 계산한 다음, 그 결과와 일치하는 case 문으로 이동한다.
break 문을 만나면 전체 switch 문을 빠져나간다.
switch(조건식){
case 값1 :
//조건식의 결과값이 값1과 동일할 경우 수행되는 문장
// ...
break;
case 값2 :
//조건식의 결과값이 값2과 동일할 경우 수행되는 문장
// ...
break;
default :
//조건식의 결과값이 위 case들의 값과 일치하지 않는 경우 수행되는 문장
// ...
}
switch 문의 제약조건
1. switch 문의 조건식 결과는 정수(int 타입의 숫자들 : 1,2,3,-1,0..) 또는 문자열이어야 한다.
2. case 문의 값은 정수 상수(정수값이며 변하지 않거나 일정한 값)만 가능하며, 중복은 안 된다.
int num, result;
final int ONE = 1;
switch(result) {
case '1': // O 문자(정수 상수 49와 동일)
case ONE: // O 정수 상수
case "YES" // O 문자열(JDK 1.7부터 허용)
case num: // X 변수는 불가
case 1.0: // X 실수는 불가
}
for 문이나 while 문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수 있지만 do-while에 속한 문장은 무조건 최소한 한 번의 수행이 보장된다.
2-1. for
for(1.초기화; 2.조건식; 3.증감식){
4.수행될 문장
}// 실행 순서는 1-2-4-3
향상된 for 문(enhanced for statement)
JDK 1.5부터 추가된 새로운 문법
향상된 for 문은 일반적인 for 문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용하는 제약이 있다.
String[] str = {"test1","test2","test3","test4","test5"};
//기존 for
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
//향상된 for
for(String tmp : str){
System.out.println(tmp);
}
2-2. while
while(조건식){
//조건식이 참일 경우 반복될 문장
}
2-3. do-while
do{
//최초일 때 한 번 수행되고 while 문의 조건식이 참일 경우 계속 수행되는 문장
}while(조건식);
2-4. break
자신이 포함된 가장 가까운 반복문을 벗어난다.
2-5. continue
반복이 진행되는 도중에 continue 문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
2-6. 이름 붙은 반복문
break 문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없다.
중첩 반복문 앞에 이름을 붙이고 break 문과 continue 문에 이름을 지정하여 하나 이상의 반복문을 벗어난다.
break name1; //break name1; //break name1; //break name1;
//break; break; //break; //break;
//continue name1; //continue name1; continue name1; //continue name1;
//continue; //continue; //continue; continue;
출력값 : 출력값 : 출력값 : 출력값 :
name1 out out- i : 0 name1 out in - i : 0, j : 1
out- i : 1 in - i : 0, j : 2
out- i : 2 out- i : 0
name1 out in - i : 1, j : 1
in - i : 1, j : 2
out- i : 1
in - i : 2, j : 1
in - i : 2, j : 2
out- i : 2
name1 out
기타. Math.random()
이 메서드는 0.0과 1.0사이의 범위에 속하는 하나의 double 값을 반환한다.
0.0은 범위에 포함되고 1.0은 포함되지 않는다.
0.0 < Math.random() < 1.0
(int) (Math.random()*5)+1 //1과 5사이의 랜덤 정수값 받기