자바[Java] 제어문의 조건문과 반복문이란 개념 정리

반응형

제어문이란?

  제어문은 프로그램의 동작에 대해 반복조건을 걸 수 있는 실행문이며, 프로그램의 흐름을 변경하게 끔 도와줍니다.

일반적으로 조건식과 실행의 구문인 중괄호{ }로 구성어되어 있고 상황에 따라 결과를 진실(true), 거짓(false)으로 반환합니다.

조건문 반복문
if문과 switch문 for문 while문 do-while문 break문 continue문

 

if문

 
 

아래 코드는 if 문의 예제로 조건식이 true일 경우 if 문의 내용을 표기하고, false일경우 if 문의 내용을 표기하지 않습니다.

// a 는 95 a 가 90보다 크거나 같을경우 합격 작을경우 불합격  
package a;  
  
  
public class ddd {  
public static void main(String[] args) {  
  
int a = 95; // a는 95이며  
  
if(a >=90)**{**  // a가 90보다 크거나 같을경우  
System.out.println("합격"); // 해당 내용을 출력한다  
**}**  
  
if(a <90)**{**  // a가 90보다 작을경우  
System.out.println("불합격");  // 해당 내용을 출력한다  
**}**  
  
}  
}

실행 결과 : 합격  
※ int a = ??; 의 값의따라 결과가 달라진다.  
a가 95로 첫 if (a >=90) 문의 내용은 true로 합격이 표시된다.

if - else 문

아래 코드는 if - else문의 예제로 블록과 함께 사용되어 결과에따라 truefalse의 내용들을 표기합니다.

// 위의 내용을 if-else문으로 바꾸기  
package a;  
  
  
public class ddd {  
public static void main(String[] args) {  
int b = 95; // b가 95이며  
  
if(b >=90)**{**  // b가 90보다 크거나 같을경우  
System.out.println("합격"); // 해당 내용을 출력하며  
**}  
**else  **{** // 혹은  
System.out.println("불합격");  // 해당 내용을 출력한다.  
**}**  
  
}  
}

실행 결과 : 합격  
※ int b = ??; 의 값의따라 결과가 달라진다.  
b가 95로 첫 if(b >=90) 문의 내용이 true로 합격이 표시된다.

if - else, if - else 문

아래 코드는 여러 개인 if-else문의 예제로

  • if 문의 조건이 false일 경우 다음 else if문을,
  • 다음 else if문도 false일 경우 또다른 else if 문을,
  • 혹은 if 문의 조건이 ture일 경우 다음 else if문 , 다음 else if문은 생략한다.
// 위의 내용을 if-else if-else문으로 바꾸기  
package a;  
  
  
public class ddd {  
public static void main(String[] args) {  
int c = 85; // c 는 85이며  
if(c >=90)  **{** // c가 90보다 크거나 같을경우  
System.out.println(c + "점"); // 점수와  
System.out.println("합격"); // 합격을  
**}**  
  
else if( c >=80)  **{** //그렇지 않으면 c가 80보다 크거나 같을경우  
System.out.println(c + "점"); // 점수와  
System.out.println("재시험");  // 재시험을 출력하며  
**}**  
  
else if ( c >=70)  **{** // 그렇지 않으면 c가 70보다 크거나 같을경우  
System.out.println(c + "점"); // 점수와  
System.out.println("탈락"); // 해당 내용을 출력한다.  
**}  
**else  **{** // 혹은  
System.out.println("응시불가"); // 해당 내용을 출력한다.  
**}**  
  
}  
}

실행결과 : 재시험  
※ int c = ??; 의 값의따라 결과가 달라진다.  
c가 85로 첫 if( c >=90) 문의 내용이 false로 두번째 else if 문이 실행된다. 두번째 else if문의 내용이 else if(c >=80)이므로 해당 결과값인 재시험이 출력된다.

 

if - else, if - else 문중 Math.random()메소드 활용

아래코드는 Math.random() 메소드를 활용해서 합격, 재시험, 탈락을 출력해보도록 하겠습니다.

// 위의 내용을 Math.random()메소드를 활용해보기  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
int d = (int)(Math.random()*100)+1;  
// int d = (int)(Math.random()*100)+1;라는 랜덤 메소드로 인해  d는 1~ 100까지 랜덤으로 출력한다.  
// ※ int d = (int)(Math.random()*10)+1; d는 1~ 10까지 랜덤으로 출력한다.  
  
if(d >=70)**{**  // 70보다 d가 크거나 같을경우  
System.out.println(d + "점");  // 해당 랜덤 출력 값과  
System.out.println("합격");  // 합격을 부여한다.  
**}**  
else if(d >=50)  **{** // 그렇지 않을경우  
System.out.println(d + "점"); // 해당 랜덤 출력 값과  
System.out.println("재시험");  // 재시험을 부여한다.  
**}**  
else  **{**  // 혹은  
System.out.println(d + "점"); // 해당 랜덤 출력 값과  
System.out.println("탈락");  // 탈락을 부여한다.  
**}**  
  
  
}  
}

실행 결과 : 실행할때마다 다르게 합격, 재시험, 탈락등 점수표시와 함께 출력한다.

중첩 if 문

 

아래코드는 중첩의 예제로 if 문의 블록 내부에 다른 if 문을 사용할 수 있습니다. 

  • 중첩 if 문의 중첩 단계는 제한이 없으며, if 문만 중첩이 되는것이 아닌 if 문, switch 문, for 문, while 문, do-while 문을 중첩 시킬수도 있습니다.
// 위 내용의 점수를 A A+로 B B+ 로 나누기  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
int e= (int)(Math.random()*100)+1;  
String a;  
  
if(e >= 70)**{** // 1번째 if문 e가 70보다 크거나 같을경우 중에  
if(e >=80)**{** // e 가 80보다 크거나 같을경우  
a = "A+"; // A+를 표시하며  
**}**  else  **{** // 혹은 그렇지 않은경우  
a = "A"; // A를 표시한다.  
**}**  
**}** else  **{**  // 혹은  
if(e >=50)**{** // e가 50보다 크거나 같을경우  
a = "B+";  // B+를  
**}**  else  **{**  // 그이외는  
a = "탈락"; // 탈락을 부여한다.  
**}**  
**}**  
System.out.println("등급 " + a + " 입니다."); // 위에 내용을 출력한다 " 등급은 ??? 입니다. "  
  
  
  
}  
}

실행 결과 : 랜덤으로 1 ~ 100까지의 결과에 따라 A+ , A , B+ , B , 탈락등으로 나뉜다.

switch 문 

  switch문if문과 마찬가지로 조건문입니다. 다만 case: break;  라는조건을 사용하며 마지막은 default: 로 처리 하게됩니다. 다른점으론 if 문 처럼 조건식이 true일 경우 블록 내부의 실행문을 실행 하는 것이 아닌 변수가 어떤 값이냐의 따라 선택하게 됩니다. case: 끝에는 break;가 붙어다니며 해당 case:가 실행이 된다면 switch문을 빠져 나오라는 의미가 됩니다. 만일 끝마치는 break; 가 없을 경우 다음 케이스들이 줄줄이 실행되게 됩니다. 

 

아래 코드는 예시입니다.

// switch문 .1  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
int a = (int)(Math.random()*3)+1;  // 1 ~ 3까지 랜덤으로 출력한다  
switch(a) {  
case 1: // 결과 값 1일 경우  
System.out.println("결과 값 1");  // 해당 내용을 출력하며  
break; // 결과 값 1의 내용을 끝낸다.  
case 2: // 결과 값 2일 경우  
System.out.println("결과 값 2");  // 해당 내용을 출력하며  
break; // 결과 값 2의 내용을 끝낸다.  
default : // 만일 case의 내용중 해당하는 것이 없으면  
System.out.println("결과 값 3");  // 해당 내용을 출력한다.  
break;  // 마지막을 끝낸다.  
}  
  
}  
}
// switch문의 break가 없는경우 .2  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
int a = (int)(Math.random()*3)+1; // 1 ~ 3까지 랜덤으로 출력한다  
switch(a) {  
case 1: // 결과 값 1일 경우  
System.out.println("결과 값 1"); // 해당 내용을 출력하며  
  
case 2: // 결과 값 2일 경우  
System.out.println("결과 값 2"); // 해당 내용을 출력하며  
  
default : // 만일 case의 내용중에 해당하는 것이 없으면  
System.out.println("결과 값 3"); // 해당 내용을 출력한다.  
  
}  
  
}  
}

실행 결과1 : 메소드의 값에 따라서 결과 값1 ~3까지 내용이 출력된다.  
실행 결과2 : 1~3까지 결과 값이  **1일 경우**  1, 2, 3을  **2일 경우**  2, 3을  **3일 경우**  3을 출력한다.

 

char 타입도 switch문에 사용이 가능합니다.

// switch 문의 char타입  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
char b = 'B';  // b 타입의 값은 'B' 이다.  
switch(b){  // b의 타입이  
case 'A' :  // 'A'나  
case 'a' : // 'a' 일경우  
System.out.println("합격");  // 해당 내용을 출력  
break;  // 끝내며  
case 'B' :  // 'B'나  
case 'b' :  // 'b'일 경우  
System.out.println("불합격");  // 해당 내용을  
break;  
default : // 만일 case의 내용중 해당하는 것이 없으면  
System.out.println("응시불가"); // 해당 내용을 출력한다.  
}  
}  
}

실행 결과 : char 타입의 b의 값은 'B' 이기 때문에 불합격이 출력된다.

 

반복문 for문

  실행문을 반복적으로 실행할 경우 for문을 사용하게 됩니다. 같은 실행문을 여러번 작성하는 것 보다는 for문을 통해 깔끔하게 처리하는 것이 좋습니다. 아래 코드는 예시코드로 1 ~ 100까지의 숫자를 합산된 값으로 출력합니다.

// for문 1~100까지 숫자 합산된 값 출력 예습.1  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
int a = 0; // a의 값은 0이다.  
for (int i=1; i<=100; i++){ // for( 초기화식; 조건식; 증감식;){  
// 조건식이 true일 경우 실행문을 실행시킨다.  
// }  
a = a + i;  // a는 a+i이다 // 위의 내용에 따라 i<=100 i가 1 ~ 100까지 합산된 값이 실행문을 통해 실행된다.  
  
}  
System.out.println("1~100까지 합 실행" + a);  // 해당 내용을 출력한다.  
}  
}

실행결과 : 1~100까지 합한 값인 5050을 출력한다.

혹은 100번동안 반복하게 처리를 할수도 있습니다.

// for문 1~100까지 숫자 출력 예습.2  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
for (int a=1; a<=100; a++){ // for( 초기화식; 조건식; 증감식;){  
// 조건식이 true일 경우 실행문을 실행시킨다.  
// }  
System.out.println("1~100까지 값을 출력 : " + a); // 1~100까지 해당 내용을 출력한다.  
}  
  
}  
}

실행 결과 :  
1~100까지 값을 출력 : 1  
1~100까지 값을 출력 : 2  
1~100까지 값을 출력 : 3  
1~100까지 값을 출력 : 4  
.......... 100 까지 출력된다.

이러한 for문을 활용해 간단한 구구단도 출력이 가능합니다.

// for문 예습.3 구구단  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
for(int i=2; i<=9; i++) {  // i 는 2부터 ~ 9까지 실행한다.  
System.out.println("aaa " + i + " 단 aaa");  // i를 '단' 을 붙여실행 시킨다.  
for(int j=1; j<=9; j++) {  // j는 1부터 ~ 9까지 실행한다.  
System.out.println(i + "x" + j + "=" + (i*j)); // i x j = i*j로 내용을 출력한다.  
}  
}  
  
  
}  
}

실행 결과 :  
aaa 2 단 aaa  
2x1=2  
2x2=4  
2x3=6  
2x4=8  
2x5=10  
2x6=12  
2x7=14  
2x8=16  
2x9=18  
aaa 3 단 aaa  
3x1=3  
.......... 9단의 9x9까지 출력된다.

다음으로는 반복문중에 while문입니다.

while문은 실행시 조건식을 보고 그에 따라 값이 달라지며 , while문의 조건식에 a라는 boolean 타입의 변수를 사용해서 키보드로 while문을 올림, 내림, 끝내기로 제어 해볼수도 있습니다.

아래 코드는 예시 코드입니다.

Key code.

// for문 예습.1 while문  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
int i = 1; // i = 1이며  
while (i <= 10) {  // i = 1이라 1부터 10까지 출력한다.  
System.out.println(i);  // 해당 내용을 출력한다.  
i++;  
}  
  
  
}  
}

실행 결과 :  
1  
2  
3  
4  
....... 10까지 출력된다.
//while문 예습.2  
// for문 예습.1 while문  
package a;  
  
public class ddd {  
public static void main(String[] args) throws Exception {  
boolean a = true; // boolean타입의 a의 값이 true일 경우  
int up = 0; // up은 0  
int keyCode = 0;  
  
while(a) {  
if(keyCode!=13 && keyCode!=10) {  // Enter가 입력되면 13, 10이 입력되어 해당 값은 제외를 시킨다.  
System.out.println("*******************");  
System.out.println("1.up| 2.down| 3.End");  
System.out.println("*******************");  
System.out.println("선택 : ");  
  
}  
  
  
keyCode = System.in.read(); // 키보드의 키코드를 읽는다.  
if(keyCode == 49) { // 1을 읽을 경우 up을 +1시킨다.  
up++;  
System.out.println("up=" + up);  
  
}else if (keyCode == 50) { // 2를읽을경우 up을 -1 시킨다.  
up--;  
System.out.println("up=" + up);  
} else if (keyCode == 51) { // 3을 읽을 경우  
a = false; //가 되어 끝남과 동시에  
}  
}  
System.out.println("End");  //해당 내용을 출력하며 종료한다.  
}  
}  
  

실행 결과 :  
*****  
1up 2down 3End  
*****  
1을 누를경우 up = 1  
2를 누를경우 up = 0  
3을 누를경우 End

do - while문

  do - while문은 조건식에 의해 반복 실행됩니다. while문은 조건식 먼저 검사하지만, 경우에 따라 내부의 실행문을 우선 실행 시키고 해당 내용에 따라 반복 실행할지 등 결정하는 경우도 발생합니다. 이러한 경우 do-while문을 통해 이용할 수 있습니다. 아래 코드는 예시 코드 입니다.

// do- while 예습.1  
package a;  
import java.util.Scanner; // 스케너 클래스 사용하기 위에 가져온다.  

public class ddd {  
public static void main(String[] args){  
System.out.println("message input.");  // 해당 내용을 출력  
System.out.println("q를 눌러 종료.");  // 해당 내용을 출력  

Scanner scanner = new Scanner(System.in); // 스케너의 객체 생성  
String inputString;  // String은inputString이다.  

do {  // do문 시작  
System.out.println(">");  // 해당 내용을 출력  
inputString = scanner.next();  // inputString은 scanner를 복사한다.  
System.out.println(inputString);  // inputString의 복사된 내용을 출력한다.  

} while( ! inputString.equals("q"));  // !은 부정 연산자 이다. 따라서 q를 누를경우 true의 반대인 false가 되어 종료가 된다.  
System.out.println();  
System.out.println("종료");  
}  
}

실행 결과 :  
message input.  
q를 눌러 종료.  
>a  
a  
>b  
b  
내용을 입력하면 해당 내용이 다시 출력된다.

break문

//break문으로 while문 종료  
package a;  

public class ddd {  
public static void main(String[] args) {  
while(true) {  // while문이 true일 경우  
int a = (int)(Math.random()*6)+1;  // a는 1~6까지 랜덤으로 출력된다.  
System.out.println(a);  //결과값을 표시한다.  
if ( a == 6) {  //하지만 a 가 6일 경우  
break;  //종료되며  
}  
}  
System.out.println("종료");  //해당내용을 표시한다  
}  
}

실행 결과 :  
3  
5  
5  
.......  
6  
종료  
해당 내용처럼 1~6까지 랜덤으로 표시되며 6이 나올경우 종료된다.

continue문

해당 문은 반복문을 종료하지 않고 계속 반복을합니다. 하여 break문을 작성해 우의 내용처럼 중간에 6이 나오면 종료되는 특성이 아니며 대부분 if문과 같이 사용됩니다.

//continue문을 사용한 while문  
  
package a;  
  
public class ddd {  
public static void main(String[] args) {  
for(int i=1; i<=10; i++) {  
if(i%2 != 0) { // i를 2로 나눈 나머지가 0이 아닐경우, 홀수인 경우  
continue; // i++가되어  
}  
System.out.println(i); // 홀수가 아닌 짝수가 10까지 출력된다.  
}  
}  
}

실행 결과 :  
2  
4  
6  
8  
10
반응형