제어문이란?
제어문은 프로그램의 동작에 대해 반복과 조건을 걸 수 있는 실행문이며, 프로그램의 흐름을 변경하게 끔 도와줍니다.
일반적으로 조건식과 실행의 구문인 중괄호{ }로 구성어되어 있고 상황에 따라 결과를 진실(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문의 예제로 블록과 함께 사용되어 결과에따라 true, false의 내용들을 표기합니다.
// 위의 내용을 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문을 올림, 내림, 끝내기로 제어 해볼수도 있습니다.
아래 코드는 예시 코드입니다.
// 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
'Java > Java' 카테고리의 다른 글
자바[Java] Getter와 Setter 메소드란? (0) | 2021.10.12 |
---|---|
자바[Java] 상수 final란 (0) | 2021.10.12 |
자바[Java] 메소드란? (0) | 2021.10.08 |
자바 [Java] 객체지향(OOP) 프로그래밍이란? 개념정리 (0) | 2021.10.07 |
자바[Java] 데이터 타입의 기본 타입과 참조 타입에 대한 개념 정리 (0) | 2021.10.06 |