페이지

2015. 1. 5.

[JAVA] Day1.제어문

제어문

Program의 흐름에 영향을 주고 때에 따라 제어가 가능하도록 하는 것이 바로 제어문이다.
제어문은 많이 쓰면 좋은건 아니다.(오류가 많아 질 위험이 커짐)


제어문의 종류(조건문과 반복문)

조건문 

 - 주어진 조건의 결과에 따라 실행 문장을 다르게 하여 전혀 다른 결과를 얻기 위해 사용되는 제어문이다.

if

 - 조건이 참일 경우만 블록을 실행

switch

 - 조건식의 값이 int일때 해당 블록문 수행





반복문 

 - 특정한 문장을 정해진 규칙에 따라 반복처리하기 위한 제어문이다.

for

 - 반복문을 잘못 사용하였을때 무한루프에 빠질수 있다.

for(초기식;조건식;증감식)
{
수행문1;
수행문2;
}

초기식 : 처음에 주어진 값. 초기식의 경우 없어도 된다.
조건식 : if문의 조건식과 같다. 조건식이 트루일때 동작
증감식 : 값의 변화

루프의 순서
1. 최초 초기식이 동작한다.
2. 조건식이 동작한다.
3. 수행문1, 2가 동작한다.
4. 증감식이 동작한다.

이후는 초기식은 최초 루프 1회만 돌고 그 이후 루프는 2, 3, 4만 동작한다.


cf) 무한 루프를 막는 ANR(스레드 킬 써비스)


class ForEx1
{
public static void main(String[] args)
{
int sum = 0;
int a;
for(a=2;a<10;a++)
{
for(int b=1;b<10;b++)
{
System.out.println(a+"*"+b+"="+a*b);
}
}
}
}

while

 - for문과 유사
 - 즉, for문을 while문으로 변경가능


class WhileEx
{
public static void main(String[] args)
{
int a = 0;
while(a < 3)
{
System.out.println("a = "+ a);
a++;
}
}
}

다중while문 가능하다. 하지만 잘 사용하지는 않음

class WhileEx2
{
public static void main(String[] args)
{
int a=2;
while(a<10)
{
int b=1;
while(b<10)
{
System.out.println(a+"*"+b+"="+a*b);
b++;
}
System.out.println();
a++;
}
}
}

do~while

- while문의 조건식이 아래로 내려간 형태
- for문이나 while문은 초기 조건에 만족하지 아니하면 수행하지 않지만 do while은 일단 한번 수행 후 조건식을 들어간다.



do while문으로 가능한 것들은 for문이나while문으로 언제나 가능
그러나 for문이나 while문으로 가능하다고 해서 do while문으로 되지는 않음
do while의 경우 조건식에 ;(세미콜론)을 찍어야함!!



class DoWhileEx1
{
public static void main(String[] args)
{
int a=2;
do
{
int b=1;
do
{
System.out.println(a+"*"+b+"="+a*b);
b++;
}while(b<10);
System.out.println();
a++;
}while(a<10);
}
}




break 

- 가장 가까운 반복문을 탈출할 때 쓰이는 제어문


if문 제어문을 종료 시키는 것이 아니라 반복문인 for문을 종료 시킴

class BreakEx1
{
public static void main(String[] args)
{
for(int a = 0;a<10;a++)
{
if(a==5)
{
break;
}
System.out.println(a);
}
}
}




여담 )그리고 if문과 switch문의 처리 속도를 보면 switch가 훨신 더 빠르다.
왜냐하면 스위치문은 결과값으로 처리하는 것이고 if문은 연산을 하면서 비교하기 때문이다. 그러나 체감상 차이는 없고 if문을 많이 쓴다.





continue


 - 중단시키는 것이 아니고 다음 문장으로 넘어감
 - 현재 진행되는 반복 회차를 포기하고 다음 회차로 이동 한다.
 - for문에서 자주 사용함
 - 즉, 예제에서 continue만나면 다음 반복문 수행

class ContinueEx1
{
public static void main(String[] args)
{
for(int a = 0;a<10;a++)
{
if(a%2 == 0)
{
continue;
}
System.out.println(a);
}
}
}




break label & ContinueLabel

 - 단일 break의 경우 반복문 내에 반복문이 있는 경우 가장 인접한 반복문만 종료 된다.
 - 레이블은 원하는 위치를 모두 멈추고자 할 때 레이블을 설정한다.

class BreakLabelEx1
{
public static void main(String[] args)
{
 exit : for(int a=0; a<5; a++)
{
for(int b=0; b<5; b++)
{
if(b==2)
{
break exit;
}
System.out.println(a+" "+b);
}
}

}
}


class ContinueLabelEx1
{
public static void main(String[] args)
{
 exit : for(int a=0; a<5; a++)
{
for(int b=0; b<5; b++)
{
if(b==2)
{
continue exit; //a for문의 증감식으로 이동
}
System.out.println(a+" "+b);
}
}

}
}







제어문의 경우 if문, 반복문의 경우는 for문을 자주 사용한다.



시스템적으로 break문을 많이 사용하면 좋지는 않음.
break나 continue를 자주 사용하지는 아니함.
시스템을 강제로 종료하는 것이기 때문에 break를 자주 사용하는 것을 자제할 것






<에디트 플러스 단축키 만드는법>
도구-사용자도구구성-유저툴

컴파일
프로그램 : C:\Program Files\Java\jdk1.8.0_25\bin에 javac.exe
인수 : 파일이름
파일디렉토리

실행
프로그램 C:\Program Files\Java\jdk1.8.0_25\bin 의 java.exe
인수 : 확장자를 뺀 파일명
파일 디렉토리