조건문
이 충기
명지대학교
컴퓨터공학과
들어가며
Q: 집에서 학교로 가려고 한다. 가지고 있는 돈이10,000 원 이상이면 택시 타고 가고 10,000원미만이고 5,000원 이상이면 직행버스 타고 가고5,000원 미만이면 지하철 타고 간다. 이 경우에집에서 학교에 가는 방법을 상세하고 명확하게기술하라.
A:
2
3
흐름 제어(Flow Control)
• 흐름 제어는 문들이 프로그램 내에서 실행되는순서이다.
• 다르게 명시하지 않는다면 메소드 내의 문들의실행 순서는 문들의 순서와 같다.
• 다음 문들이 이 순서를 바꾸는 것을 가능하게한다:• 조건문(selection statement): 문의 실행 여부를 조건의
만족 여부에 따라 선택하게 한다.
• 반복문(repetition statement 혹은 loop): 문들을 조건의만족 여부에 따라 반복적으로 실행하게 한다.
• 각 조건은 부울 연산식(Boolean expression)에기초한다.
4
조건문
• 조건문은 어느 문이 다음에 실행될지를선택하게 한다.
• 조건문은 우리가 조건(condition)의 만족여부에 따라 기본 결정들을 하게한다.
• 자바 조건문• if 문
• switch 문
5
부울 연산식
• 부울 연산식(혹은 조건식)은 관계연산자(relational operator)와 논리연산자(logical operator)를 사용한다.
• 부울 연산식의 연산 결과는 true 혹은false이다.
• 부울연산식은 복잡한 조건을나타내기 위해 사용된다.
6
관계 연산자
• 관계 연산자는 두 피연산자들(operands)의 값을서로 비교하여 그들 사이의 관계를 결정한다.
3 == 4 (false)
3 != 4 (true)
3 > 4 (false)
3 < 4 (true)
3 >= 3 (true)
7 <= 7 (true)
7
논리 연산자
• 논리 연산자는 논리 연산을 수행한다:
• && (논리 AND)
• || (논리 OR)
• ! (논리 NOT)
• 이 연산자들의 모든 피연산자는 boolean
유형을 갖고 결과 값은 부울 값(true 혹은false)이다.
8
논리 AND와 논리 OR
• &&: 두 개의피연산자가 모두true면 결과는 true,
아니면 false
• || : 두 개의피연산자 중적어도 어느하나가 true면결과는 true, 아니면false
a b a && b a || b
true true true true
true false false true
false true false true
false false false false
진리표
9
논리 NOT
• ! : 피연산자가 true면 false, false면true
a ! a
true false
false true
진리표
10
예: 논리 연산자
다음 부울 연산식의 결과는?
1. (3 == 5) && (8 == 8)
2. (8 == 7) || (5 < 10)
3. !(3 == 9)
11
관계 / 논리연산자 우선 순위
• 논리연산자들은 관계연산자들과산술연산자들(arithmetic
operators)보다 우선순위가 낮다.
• 논리 NOT는 논리 AND 혹은 논리OR보다 우선순위가 높다
12
예: 부울 연산식
Q: 시험 점수가 90점 이상이고 출석률이100%라는 조건을 나타내라.
A: 시험점수와 출석률을 나타내는변수들을 각각 examgrades와attendrate라고 하자. 그러면 조건은다음과 같다:
(examgrades >= 90) && (attendrate == 100)
13
조건 연산자
• 조건 연산자(conditional operator)는 두개의 연산식들 중 하나를 결정하기 위해조건식을 사용하는 연산자이다.
• 구문: (조건식) ? 연산식1 : 연산식2
• 의미: 조건식의 연산 결과가
true이면 연산식1, false이면
연산식2의 값을 계산한다
14
예: 조건 연산자
max = (x < y) ? y : x;
• 위 배정문은 변수 x의 값이 변수y의 값보다 작으면 변수 max에 y의값을 아니면 x의 값을 저장한다.
15
if 문
• if 문은 조건식의 논리 값에 따라 문의실행 여부를 결정한다.
• 구문: if (조건식)
문;
• 의미: 조건식이 true이면 문을 실행하고false이면 실행하지 않는다.
주: if 문에서 문 대신에 복합문(compoundstatement)이 나올 수 있다.
16
if 문의 흐름도(flowchart)
조건식
false
문
true
17
예: if 문
if (score > max)
max = score;
• 위 문은 변수 score의 값이 변수max의 값보다 크다면 max의 값을score의 값으로 바꾼다. 그렇지않다면 아무 일도 하지 않는다.
18
if else 문
• if 문에 else절을 추가한 것이 if-else
문이다
• 구문: if (조건식) 문1;
else 문2;
• 의미: 조건식이 true이면 문1을실행하고 false이면 문2를 수행한다.
19
if-else 문의 흐름도
조건식
문1
true false
문2
20
예: if-else 문
if (n % 2 == 0)
System.out.println(“n은 짝수이다.”);
else
System.out.println(“n은 홀수이다.”);
• 위 문은 n을 2로 나눈 나머지가0이면(n이 짝수이면 ) 첫 번째출력문을 실행하고 아니면 두 번째출력문을 실행한다.
21
중첩된 if 문(nested if statement)
• 중첩된 if 문은 if 문의 결과로서 실행되는문이나 else 절의 문이 또 다른 if 문인경우이다.
if (score >= 90) grade = 'A';
else if (score >= 80) grade = 'B';
else if (score >= 70) grade = 'C';
else if (score >= 60) grade = 'D';
else grade = 'F';
데이터 비교
• 실수들 비교- 실수들은 근사값으로 표현된다.
- 두 개의 실수 값들이 같음을 비교할 때 값들의 차를계산하고 그 차가 주어진 허용 한계치 내에 있다면같다고 간주한다.
- 예: if(num1 – num2 < 0.0001) System.out.print(“같다”);
• 문자들 비교- 자바에서 모든 문자는 유니코드로 나타내진다.
- 유니코드 문자 집합에서 모든 문자들의 순서는 정의되어있다.
- 예: if(„a‟ < „b‟) System.out.print(“문자 a는 문자 b보다 작다”);
22
23
문자열 상수들 비교
• 문자열 상수들 (String literals) 을비교하기 위해 관계 연산자들을 사용할수 없다.
• 두 개의 문자열 상수들이 같은지를비교하기 위해 String 클래스의 equals메소드를 이용한다.
• 예: String in = “Hi”;
String out = “Hello”;
if (in.equals(out)) System.out.println(“같다”);
24
switch 문
• switch 문은 어느 문이 다음에 수행될 지를결정하는 또 다른 방법을 제공한다.
• switch 문은 연산식을 계산하여 그 결과가여러 경우들의 하나와 같은지를 확인한다.
• 각 경우는 하나의 값과 문들의 목록을가진다.
• 연산식의 계산 값과 같은 첫번째 경우에해당하는 문들을 수행한다.
25
switch 문의 일반적인 구문
switch (연산식) {
case 값1 : 문 목록 1
case 값2 : 문 목록 2
case 값3 : 문 목록 3
• • •
default: 문 목록 x
}
• 문 목록은 문들의 나열이다. 문 목록은 보통break 문으로 끝난다.
• 연산식의 계산 결과가 여러 값들의 하나와같다면 그에 대응하는 문 목록을 실행한다.
26
switch 문
• 자주 break 문이 각 case의 문 목록의 마지막문으로 사용된다.
• break 문은 제어 흐름을 switch 문의 다음 문으로이동하게 한다.
• break 문이 사용되지 않는다면 제어 흐름은 다음case의 문 목록으로 이동한다 .
• 때때로 이것이 적절할지 모른다. 그러나 우리는자주 각 case에 대응된 문들만 실행하기를원한다.
• 또한 switch 문은 선택사항으로 기본(default) case를 가질 수 있다. 이 경우는 연산식의 계산결과가 어떤 값들과도 같지 않다면 수행된다.
27
switch 문
• switch 문의 연산식의 결과 값은 int
형이나 char 형 값이어야 한다.
• 각 case의 값은 상수여야 한다.
28
예: switch 문
// grade 는 char 형 변수이다.
switch (grade) {
case 'A' : aCount++;
break;
case 'B' : bCount++;
break;
case 'C' : cCount++;
break;
case 'D' : dCount++;
break;
default : fCount++;
break;
}
29
예제 프로그램
문제: 두 개의 정수 값을 입력 받아최대값과 최소값을 구하는프로그램을 작성하라.
설계:
• 변수들: 입력 정수 값들, 최대값, 최소값
• 알고리즘: 다음 슬라이드
알고리즘
30
number1 > number2?
시작
첫번째 정수 값을 읽어 들여 number1에 저장한다
두번째 정수 값을 읽어 들여 number2에 저장한다
최대값 = number1
최소값 = number2
최대값 = number2
최소값 = number1
최대값과 최소값를 출력한다
끝
아니요
예
구현// FindMaxMin.java: 두 정수의 최대값과 최소값을 구한다
import java.util.Scanner;
public class FindMaxMin {
public static void main(String[] args) {
// 변수들을 선언한다
int number1, number2, maximum, minimum;
Scanner scan = new Scanner(System.in);
// 두 개의 정수 값을 읽어 들인다
System.out.println("두 개의 정수 값을 입력 하세요: ”);
number1 = scan.nextInt();
number2 = scan.nextInt();
// 두 개의 정수 값을 비교하여 최대값과 최소값을 구한다
if (number1 > number2) { maximum = number1; minimum = number2; }
else { maximum = number2; minimum = number1; }
// 최대값과 최소값을 출력한다
System.out.println("최대값은 ” + maximum + ”이다“);
System.out.println("최소값은 ” + minimum + ”이다“);
}
}
31
32
요약
• 흐름 제어
• 부울 연산식
• 관계 연산자
• 논리 연산자
• if 문
• switch 문
• 간단한 프로그램 작성