안녕하세요? 이번 시간에는 제어문에 대하여 공부하겠습니다.
제어문은 프로그램의 수행 순서를 제어하거나, 문장들의 수행 횟수를 조정하는 문장입니다.
한마디로 제어문은 프로그램에서 가장 중요한 부분입니다.
1. 제어문이란?
- 맨 처음 자바의 개요에서 말했듯이 자바 인터프리터는 위에서 아래로 오른쪽에서 왼쪽으로 프로그램을 읽어갑니다. 그런 프로그램의 흐름을 변경할 수 있는게 제어문입니다.
- 제어구조는 3가지 종류가 있습니다.
- ① 순차처리 : 위에서 아래로 처리
- ② 선택처리
- 조건분기 : if, if~else, swich 등
- 무조건 분기 : goto(자바에서는 사용할 수 없는 예약어)
- ③ 반복 처리(Loop): for, while, do~while
2. 선택처리 - 조건 분기
① 단일 if문
- 형식 if (조건문) { 문장; } 문장;
- 조건문의 결과가 true 이면 { }안에 문장을 수행한다. 수행 후 { } 바깥쪽 문장을 처리한다.
결과가 false이면 { } 안쪽을 무시하고 바깥쪽 문장을 처리한다.
<예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class TestIf { public static void main(String args[]) { int jumsu = 80; if(jumsu >= 60) // if( 조건문 ) { System.out.println("당신은 합격입니다"); // 문장; } System.out.println("당신의 점수는" + jumsu + "입니다" ); // 문장; } } | cs |
<결과>
② if ~ else문
- 형식
if(조건문)
{
처리내용 1;
}else
{
처리내용 2;
}
- 조건문의 결과가 true이면 처리내용1을 처리 false이면 처리내용2 처리
<예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class TestElse { public static void main(String args[]) { int jumsu = 40; if(jumsu >= 60) //jumsu의 값이 60 이상이면 합격 아니면 { System.out.println("당신은 합격입니다"); } else { System.out.println("당신은 불합격입니다"); } System.out.println("당신의 점수는" + jumsu + "입니다" ); } } | cs |
<결과>
③ 다중 if ~ else문
- 형식
if(조건문1)
{
처리내용 1;
}else if(조건문2)
{
처리내용 2;
}else
{
처리내용 3;
}
- else if는 개수의 상관없이 생성가능
④ swich-case 문
- 형식
switch(수식) // 수식 결과는 정수형 or 문자형, 논리형 X
{
case 값1: // case의 값은 오로지 하나
처리내용1;
break; // case를 빠져나오며 다음 case문으로 계속 넘어간다.
case 값2:
처리내용2;
break;
default: // case문에서 일치하는 값이 없을 경우 수행
처리내용;
break;
}
<예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import java.util.Scanner; public class SwitchTest { public static void main(String args[]) { int jumsu = 0; Scanner scanner = new Scanner(System.in); // 점수를 입력받기 위해 scanner사용 System.out.print("임의의 숫자를 입력하세요: "); jumsu = scanner.nextInt(); System.out.println("점수 : " + jumsu); scanner.close(); // scanner 닫기 char grade; switch(jumsu / 10) // 입력받은 점수를 10으로 나누어 몫을 정수만 받기 { // 100 ~ 90이면 A학점 case 10: case 9: grade = 'A'; System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다."); break; // 80점대이면 B학점 case 8: grade = 'B'; System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다."); break; // 70점대이면 C학점 case 7: grade = 'C'; System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다."); break; // 60점대이면 D학점 case 6: grade = 'D'; System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다."); break; // 60점 미만은 F학점 case 5: case 4: case 3: case 2: case 1: case 0: grade = 'F'; System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다."); break; // 이외에 점수를 입력했을 때 디폴트 default: System.out.println("잘못된 점수 입력입니다"); } } } | cs |
<결과>
3. 반복 (Loop)
① while문
- 형식
while(조건식) // 조건식이 true일경우 { }내 처리 false일경우 빠져나옴
{
처리내용;
}
<예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class WhileTest { public static void main(String args[]) { int a = 0; while(a < 10) // a의 값이 10보다 작을때 까지 반복 { a++; System.out.println("a=" + a); } } } | c<> |
do // 적어도 한번 { }내 문장 실행
{
문장;
문장;
}
while(조건식); // 조건식에 true이면 { } 문장 다시한번 실행 false면 빠져나오기
<예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class DoWhile { public static void main(String args[]) { int a = 0; do { a++; System.out.println("a=" + a); } while(a < 10); // do의 식을 적어도 한번 거치고나서 a의 값이 10보다 작으면 한번더 계속 반복 } } | cs |
<결과>
③ for문
- 형식
// 초기식은 맨처음 한번 실행후 조건식으로 이동
// 조건식을 만족하면 { }내 문장들을 처리한후 증감식에 이동
for (초기식; 조건식; 증감식)
{
문장;
문장;
}
<예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class ForTest { public static void main(String args[]) { // 초기식: i의 값은 초기값이 1이다. // 조건식: i가 10이하이면 반복을 중단한다. // 증감식: for문의 내용이 진행된후 i는 1씩증가한다. for(int i = 1; i <= 10 ; i++ ) { System.out.println("a = " + i); } } } | cs |
<결과>
④ 무한 반복문 만들기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class ContinueQuter { public static void main(String args[]) { outLoop: for (int i = 0 ; i < 3 ; i++) // for문에 outLoop라는 라벨을 준다. { for(int j = 0 ; j < 5 ; j++) { System.out.println("i : " + i + " - j : " + j); if(j == 2) continue outLoop; // j의 값이 2라는 조건이 만족하면 outLoop라는 라벨로 돌아간다. } } } } | cs |
<결과>
<Flag문을 이용한 예제 소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Flag { public static void main(String args[]) { int hol = 0, jjak = 0; int flag = 0; for(int i = 0 ; i <= 10 ; i++) { if(flag == 0) { hol = hol +i; flag = 1; }else { jjak = jjak +i; flag = 0; } } System.out.println("홀수의 합 : " + hol); System.out.println("짝수의 합 : " + jjak); } } | cs |
- 제어문을 이용한 Flag가 0일때는 홀수의 합 1일때는 짝수의 합을 구하는 프로그램
<결과>
5. 실습 예제
- 중요한 제어문을 배웠봤으니 한번 실습을 해봐야겠지요?아래 간단한 문제들을 한번 풀어보세요.(정답은 다음 시간에 공개하겠습니다.)
문제1. 1부터 9까지의 정수를 입력 받아서 입력된 단의 구구단을 출력해보세요.
<결과>
문제2. 입력된 년도가 윤년인지 아닌 지 판별해주는 프로그램을 작성해보세요.
'조재연의 Java 개꿀떡 > 조재연의 Java 기초 개꿀떡' 카테고리의 다른 글
자바(Java)의 기초 박살내기 - 상속(Inheritance)과 다형성(Polymorphism) (1) | 2017.07.04 |
---|---|
자바(Java)의 기초 박살내기 - 객체지향(클래스)의 기본 개념 (0) | 2017.07.02 |
자바(Java)의 기초 박살내기 - 연산자(Operator) (1) | 2017.06.30 |
자바(Java)의 기초 박살내기 - 데이터 타입(Data Type) (0) | 2017.06.29 |
자바(Java)의 기초 박살내기 - 이클립스(Eclipse) 단축키 (0) | 2017.06.29 |