본문 바로가기
java

[Java] 제어문 - 조건, 반복

by jinbro 2017. 9. 3.
[제어문]
- main() 함수의 흐름을 제어할 수 있는 수단 : 다양한 작업을 할 수 있지!
- 종류
(1) 조건문 : if ~ else if ~ else , switch
=> switch: 상황(조건)이 4가지 이상일 때, 변수의 값에 따라 제어를 할 때 사용, break 필히 사용(안쓰면 다른 case로)
=> switch: char 타입도 처리할 수 있음, 영어 대소문자에 관계없이 똑같은 알파벳이라면 동일 처리
=> switch: 정수타입(byte, short, char, int, long) + 정수값 산출 연산식 + String(java 1.7 추가)


(2) 반복문 : for, while, do-while
=> for: 초기화 둘 이상, 증감식 둘 이상 있어도 됨( 쉼표(,)로 구분 )
=> for: ()에서 초기화되는 변수는 for문 내 로컬 변수 - 자바스크립트는 var로 선언하면 window 변수(다름!)
=> for: 조건식이 만족하면 loop 종료
=> for: 초기화할 변수(loop)의 타입을 실수 타입으로 선언하면 안됨 - 정확하게 0.1을 표현하지못함(약간 더 큼)
=> for: 이중 for문을 사용할 수 있음 - 사용할 땐 신중하게(연산 속도: 1회연산시간 X outer for 연산횟수 X inner for 연산횟수)
=> for: A 집합에서 B집합의 내용을 찾을 때(search 구현) 중첩 for문은 성능이 떨어질 수 있음
=> for: 초기화식, 조건식, 증감식 모두 생략하고 for(;;)을 할 경우 무한 반복
=> while: 횟수가 아닌 조건식(산출값)에 따라 반복 실행여부 정해짐 - true일 때 반복
=> while: 조건식에 연산식이 아닌 true가 온다면 무한반복문으로 봄 - 탈출조건과 break문으로 제어
=> while: 어떻게 진행될지 모르나 특정 조건이 맞을 때 종료해야할 경우 사용 - for처럼 일정하게 진행되는 것 아님
=> do-while : 조건식에 의해 반복문을 실행시키나 최초 1회 실행문을 실행하고 조건식을 따진 후 반복할지 정함
=> do-while : while(조건식) 마지막에 ;(세미콜론)을 붙여줘야함


(3) break문
=> for, while, do-while 실행을 중지할 때 사용
=> 특정 조건에 이르렀을 때 중단시킬 수 있음 : 조건문과 같이
=> 한번에 하나 : 가장 가까운 반복문 중단
=> 중첩일 때 : 바깥쪽 반복문을 중단시키기위해서 바깥 반복문에 라벨을 붙이고 break 라벨;을 하면됨


(4) continue문
=> for, while, do-while에서만 사용
=> 아래 코드가 더 있지만 특정 상황일 때 아래 코드 실행하지않고 다시 조건식으로 돌아가게함
=> 증감 정상 동작, continue이 수행되면 아래 코드만 실행x


[예시코드]
public class Control{
public static void main(String[] args) throws IOException{
/* if */
if(true){
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}

/* switch */
int num = (int)(Math.random()*6) + 1; // 1<= num < 7
String msg = "";
switch (num){
case 6:
msg = "왕입니다요";
break;

case 5:
msg = "오오오오오";
break;

case 4:
msg = "까비요";
break;

case 3:
msg = "중간부터 합시다";
break;

case 2:
msg = "ㅎㅎㅎㅎㅎ..";
break;

case 1:
msg = "똑같은 사람 나오길.....";
break;

/* default 생략가능 */
default:

break;
}
System.out.println(msg);

/* switch2 */
char str = 'a';
switch (str){
case 'a':

break;

case 'b':

break;

case 'c':

break;
}

/* switch3 */
String position = "사장";
switch (position){
case "사장":

break;

case "부장":

break;

case "과장":

break;
}


/* for */
for(int i=0, j=100; i<30 && j>=50; i++, j--){
System.out.println(i +", " + j);
}


/* for2 */
for(float i=0.1f; i<=1.0f; i+= 0.1f){
System.out.println(i);
}


/* while */
int num2 = 0;
while(true){
if(num2>10){
break;
}
System.out.println(num2);
num2 += 1;
}


/* while2 */
int level = 0;
int keyCode = 0;
boolean gameOn = true;

while(gameOn){
/* enter키 입력 받았을 때 다시 출력하지않기 */
if(keyCode != 13 && keyCode != 10) {
System.out.println("============================");
System.out.println("1. 난이도 상승 | 2. 난이도 하락 | 3. 끝내기");
System.out.println("============================");
System.out.print("선택 : ");
}

keyCode = System.in.read(); //keyPress read

switch (keyCode){
case 49:
level += 1;
break;

case 50:
if(level<1){
System.out.println("\n가장 낮은 난이도입니다.");
} else {
level -= 1;
}
break;

case 51:
gameOn = false;
break;
}
}

System.out.println("게임 종료");


/* do-while */
String inputStr = "";
do{
Scanner scanner = new Scanner(System.in);
//콘솔에서 입력받은 문자열을 한번에 읽음, 원래 System.in.read()는 한번에 하나의 문자만 읽음
//System.in : 바이트 단위로 읽음
inputStr = scanner.nextLine();
System.out.println(inputStr);

}while(!inputStr.equals("quit"));


/* break label */
Exam: for(int i=2; i<10; i++){
for(int j=1; j<10; j++){
if(i==9){
System.out.println("ㅂㅇ");
break Exam;
}
}
}


/* continue : 2의 배수만 출력 안되게 */
for(int i=0; i<=20; i++){
if(i%2 ==0){
continue;
}

System.out.println(i);
}

}
}


[IntelliJ 팁]
(1) 자바에서 제공하는 표준 클래스라면 ctrl 키를 누르고 클래스를 클릭하면 클래스의 코드를 볼 수 있음
- 메서드 확인할 수 있음 : 리턴 형태와 어떻게 연산하는지, 메서드에 대한 설명까지


[예시에 사용된 자바 표준 클래스 팁]
- JDK : JVM + 개발에 필요한 도구 + 표준 클래스
- 자바 어플리케이션 개발에 있어서 필요한 클래스를 제공: java.lang / java.util 패키지 > 클래스들
- 클래스명 입력 후 ctrl 키 누르고 클래스 클릭(IntelliJ 기준): 시간날 때 클래스 구경

(1) Math
- 기본적인 수학 함수 제공
- 클래스의 메서드가 static method: Math의 인스턴스를 생성하지않고도 Math.메서드명 으로 사용


(2) Scanner
- 입력과 관련한 메서드를 제공하는 클래스
- 인스턴스 생성 후 메서드 사용: instance method 



댓글