1
4장 조건문
이충기
명지대학교 컴퓨터공학과
2
들어가며
Q: 집에서 학교로 가려고 한다. 가지고 있는 돈이 10,000원 이상이면 택시를 타고 가고 10,000원 미만이고 5,000원 이상이면 직행버스를 타며, 5,000원 미만이면 지하철을 타 고 간다. 이 경우에 집에서 학교에 가는 방법을 상세하고 명확하게 기술하라.
A:
3
흐름 제어
흐름 제어는 문들이 프로그램 내에서 실행되는 순서이다.
메소드 내의 문들의 기본 실행 순서는 문들의 순서와 같다.
다음 문들이 이 순서를 바꾸는 것을 가능하게 한다.
- 조건문(선택문): 문의 실행 여부를 조건의 만족 여부에 따라 선택하게 한다.
- 반복문(loop): 문들을 조건의 만족 여부에 따라 반복적으로 실행하게 한다.
각 조건은 부울 연산식에 기초한다.
4
조건문
조건문은 어느 문이 다음에 실행될지를 선택하게 한다.
조건문은 우리가 조건의 만족 여부에 따라 기본 결정을 하게 한다.
자바 조건문 - if 문
- switch 문
5
부울 연산식
부울 연산식(혹은 조건식)은 관계 연산자와 논리 연산자를 사용한다.
부울 연산식의 연산 결과는 true 혹은 false이다.
부울 연산식은 복잡한 조건을 나타내기 위해 사용된다.
6
관계 연산자
관계 연산자는 두 피연산자들의 값을 서로 비교하여 그들 사이의 관계를 결정한다.
3 > 4 (false) 3 < 4 (true) 3 >= 3 (true) 7 <= 7 (true) 3 == 4 (false) 3 != 4 (true)
7
논리 연산자
논리 연산자는 논리 연산을 수행한다.
- && (논리 AND) - || (논리 OR)
- ! (논리 NOT)
이 연산자들의 모든 피연산자는 논리형을 갖고 결과 값은 true 혹은 false이다.
8
논리 AND와 논리 OR
&&: 두 개의 피연산자가 모두 true면 결과는 true, 아니면 false
|| : 두 개의 피연산자 중 적어도 어느 하나가 true면 결과는 true, 아니면 false
진리표
9
논리 NOT
! : 피연산자가 true면 false, false면 true
진리표
10
예: 논리 연산자
다음 논리 연산식의 결과는?
1.(3 == 5) && (8 == 8) 2.(8 == 7) || (5 < 10)
3.!(3 == 9)
11
관계 / 논리연산자 우선 순위
관계연산자들은 산술연산자들보다 우선순위가 낮다.
논리연산자들은 관계연산자들보다 우선순위가 낮다.
논리 NOT는 논리 AND 혹은 논리 OR보다 우선순위가 높다.
12
예: 논리 연산식
Q: 시험 점수가 90점 이상이고 출석률이 100%라는 조건을 나타내라.
A: 점수와 출석률을 나타내는 변수들을 각각 score와 attendRate라고 하자.
그러면 조건은 다음과 같이 나타낼 수 있다.
(score >= 90) && (attendRate == 100)
13
조건 연산자
조건 연산자는 두 개의 연산식들 중 하나를 결정 하기 위해 조건식을 사용하는 연산자이다.
구문법: (조건식) ? 연산식1 : 연산식2
의미: 조건식의 논리 값이 true이면 연산식1,
false이면 연산식2의 값을 계산한다.
14
예: 조건 연산자
max = (x < y) ? y : x;
위 배정문은 변수 y의 값이 변수 x의 값보다
크면 변수 max에 y의 값을 아니면 x의 값을
저장한다.
15
if 문
if 문은 조건식의 논리 값에 따라 문의 실행 여부를 결정한다.
구문법: if (조건식) 문
의미: 조건식이 true이면 문을 실행하고 false이면 실행하지 않는다.
주: if 문에서 문 대신에 복합문이 나올 수 있다.
16
if 문의 순서도
조건식
false
문
true
17
예: if 문
if (gpa >= 4.0)
System.out.println(“장학금 대상자”);
위 문은 변수 gpa의 값이 4.0보다 크거나 같다면
‘장학금 대상자’가 출력된다. 그렇지 않다면 아무
일도 하지 않는다.
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(“짝수이다”);
else
System.out.println(“홀수이다”);
위 문은 n을 2로 나눈 나머지가 0이면(n이 짝수이면 )
‘짝수이다’를 출력하고 아니면 ‘홀수이다’를 출력한다.
21
중첩된 if 문
중첩된 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';
22
데이터 비교
실수들 비교
- 실수들은 근사값으로 표현된다.
- 두 개의 실수 값들이 같음을 비교할 때 값들의 차를 계산하고 그 차가 주어진 허용 한계치 내에 있다면 같다고 간주한다.
- 예: if(num1 – num2 < 0.0001) System.out.print(“같다”);
문자들 비교
- 자바에서 모든 문자는 유니코드로 나타내진다.
- 유니코드 문자 집합에서 모든 문자들의 순서는 정의되어 있다.
- 예: if(‘a’ < ‘b’) System.out.print(“문자 a는 문자 b보다 작다”);
23
문자열 비교
문자열들을 비교하기 위해 관계 연산자들을 사용할 수 없다.
두 개의 문자열들이 같은지를 비교하기 위해 String 클래스의 equals 메소드를 이용한다.
예: String name1 = “선남”;
String name2 = “선녀”;
if (name1.equals(name2)) System.out.println(“같다”);
else System.out.println(“다르다”);
24
switch 문
switch 문은 어느 문이 다음에 실행될 지를 결정하는 또 다른 방법 을 제공한다.
switch 문은 연산식을 계산하여 그 결과가 여러 경우들의 하나와 같은지를 확인한다.
각 경우는 하나의 값과 문(들)의 목록을 가진다.
연산식의 계산 값과 같은 첫 번째 경우에 해당하는 문(들)을 실행 한다.
25
switch (연산식) {
case 값1 : 문 목록 1 case 값2 : 문 목록 2 case 값3 : 문 목록 3
• • •
default: 문 목록 x }
문 목록은 문들의 나열이다. 문 목록은 보통 break 문으로 끝난다.
연산식의 계산 결과가 여러 값들의 하나와 같다면 그에 대응하는 문 목록을 실행한다.
switch 문의 일반적인 구문
26
switch 문
자주 break 문이 각 case의 문 목록의 마지막 문으로 사용된다.
break 문은 제어 흐름을 switch 문의 다음 문으로 이동하게 한다.
break 문이 사용되지 않는다면 제어 흐름은 다음 case의 문 목록으로 이동 한다.
때때로 이것이 적절할지 모른다. 그러나 우리는 자주 각 case에 대응된 문 들만 실행하기를 원한다.
또한 switch 문은 선택사항으로 기본(default) case를 가질 수 있다. 이 경우 는 연산식의 계산 결과가 모든 case의 값들과 같지 않다면 default 다음에 나오는 문 목록 x를 수행한다.
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
예제 프로그램
문제: 두 개의 정수 값을 입력 받아 최대값과 최소값을 구하는 프로그램을 작성하라.
설계
변수들
- number1: 첫 번째 정수 값 - number2: 두 번째 정수 값 - maximum: 최대값
- minimum: 최소값
알고리즘: 다음 슬라이드
30
알고리즘
number1 > number2?
시작
첫 번째 정수 값을 읽어 들여 number1에 저장한다 두 번째 정수 값을 읽어 들여 number2에 저장한다
maximum = number1 minimum = number2
maximum = number2 minimum = number1
maximum 과 minimum 을 출력한다
끝
아니요 예
31
완성 프로그램
// 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 + ”이다“);
} }
32
요약
흐름 제어
부울 연산식
관계 연산자
논리 연산자
if 문
데이터 비교
switch 문
간단한 프로그램 작성