어서와 Java는 처음이지! 제3장선택과 반복
3가지의 제어 구조
복잡한 프로그램
조건문 조건에 따라서 여러 개의 실행 경로 가운데 하나를 선택 문장이 실행되는 순서에 영향을 주는 문장 조건에 따라서 여러 개의 같은 처리를 반복
일상 생활에서의 조건문의 예 만약 비가 오지 않으면 테니스를 친다. 만약 결석이 1/3이상이면 F학점을 받는다. 만약 시간이 없는 경우에는 택시를 탄다. 만약 날씨가 좋고 공휴일이면 공원에 산책을 간다. 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다. 조건문은 프로그램의 흐름을 변경합니다.
if-else 문 if( 조건식 ) 문장1; else 문장2; 날씨가 좋은가? 테니스를 친다. 공부를 한다. 거짓 참 문장1; else 문장2; 조건식이 참이면 실행된다. 조건식이 거짓이면 실행된다.
if-else 선택 구조
예제: 짝수, 홀수 구별하기 IF-ELSE 문 키보드에서 입력받은 정수가 홀수인지 짝수인지를 말해주는 프로그램을 작성하여 보자.
예제: 두수 중 큰 수 출력하기 IF-ELSE 문 사용자로부터 두 개의 정수를 입력받아서 둘 중에 큰 수를 출력하는 프로그램을 작성하여 보자.
예제: 성과급 계산 IF-ELSE 문 사원이 실적 목표를 달성하였을 경우에는 실적 목표를 초과한 금액의10%를 성과급으로 받는 프로그램을 작성하여 보자. 실적목표 : 1000만원
Dangling Else 문제(p.108) if() else else
LAB: 성적에 따라 학점 결정하기 다중IF문
LAB: 인사말 출력하기 다중IF문 p.111 java.time.LocalDateTime
Date time = new Date(); // java.util.Date 현재시간, 날짜 time Thu Jan 01 09:12:18 CET 1970; int hours = time.getHours(); int minutes = time.getMinutes(); int seconds = time.getSeconds(); hours = 9 minutes = 12 seconds = 18
SOLUTION
switch 문 만약 가능한 실행 경로가 여러 개인 경우에는 switch 문을 사용
switch 선택 구조 default문은 생략 가능
예제: 정수-> 한글 사용자가 값을 입력하면 화면에 “하나”, “둘”과 같이 출력하는 코드를 작성하여 보자.
만약 break 문이 없다면
예제: 성적->학점 사용자가 자신의 성적을 입력하면 성적을 학점으로 변환하여 출력해주는 프로그램
SOLUTION
SOLUTION
switch 문에 문자열 사용 JDK 7부터는 switch 문의 제어식으로 String 객체를 사용할 수 있다. 예제: 월의 이름을 영어로 받아서, 월을 반환하는 프로그램을 작성
SOLUTION {
SOLUTION
LAB: 월의 일수 출력하기
실습 : 해당 월(月)의 일수계산 시행결과 몇 년도 입니까? 2012 일수를 알고 싶은 달을 입력하세요: 3 33 시행결과 몇 년도 입니까? 2012 일수를 알고 싶은 달을 입력하세요: 3 2012년 3월의 일수는 31일입니다. 몇 년도 입니까? 2016 일수를 알고 싶은 달을 입력하세요: 2 2016년 2월의 일수는 29일입니다. 도전!!!!!
실습 윤년이면 2월 29일 평년이면 2월 28일…
실습 : 사칙연산 사칙연산을 입력받아 실행결과를 출력하는 자바 프로그램을 작성하고자 한다. 이미 연산자는 +,-,*,/의 4가지로 하고 피연산자는 모두 실수이며 다음과 같이 피연산자는 빈칸으로 분리하여 입력하는 것으로 한다. 32.3 + 3 16.6 – 20.3 5 * 2.1 6 / 3 실행 예: 수식을 입력하세요> 32.3 + 3 연산결과 : 35.3
// Scanner 클래스를 사용하기 위한 import 문 public class Arithmetic { public static void main(String[] args) { Scanner scanner = // Scanner 객체 생성 System.out.print("식을 입력하세요>>"); double op1 = // 첫 번째 피연산자 입력 String operator = // 연산자 스트링 입력 double op2 = // 두 번째 피연산자 입력 double result = 0; switch( ) { case "+" : result = op1 + op2; break; case "-" : result = op1 - op2; break; case "*" : case "/" : { // 나누는 수가 0이면 System.out.println("0으로 나눌 수 없습니다."); return; //프로그램 종료 } result = op1 / op2; break; default: System.out.println("연산 기호가 잘못되었습니다."); // 연산 결과 출력
반복문 Q) 반복 구조는 왜 필요한가? A) 같은 처리 과정을 되풀이하는 것이 필요하기 때문이다. 학생 30명의 평균 성적을 구하려면 같은 과정을 30번 반복하여야 한다.
반복문의 종류
while 문 주어진 조건이 만족되는 동안 문장들을 반복 실행한다. while( 조건식 ) 문장;
while 문의 구조
예제: 환영 메시지 출력
예제: 0부터 9까지 출력하기
예제: 구구단 출력
예제: (1+2+3+...+9+10) 계산하기
1+2+…+10
do-while 문
do-while 문의 예 DoWhile1 i 변수 값이 10으로 3보다 작지 않지만 do while 문이므로 최소 한번은 실행
예제: 정확한 입력받기 Do-while 문의 사용 예 : 올바른 값이 입력될 때 까지 입력을 반복함.
Do-While 문 사례
LAB: 최대 공약수 찾기 GCD(Greatest Common Divisor)
for 루프 정해진 횟수만큼 반복하는 구조
for 문의 구조
예제: 0부터 4까지 출력하기
예제: 정수의 합 계산하기
예제: 팩토리얼 계산하기
LAB: 약수 계산하기
SOLUTION
LAB: 난수의 합 계산하기
Random 클래스 java.util.Random
SOLUTION Random rand = new Random(System.currentTimeMillis()); // seed값을 배정하여 생성
중첩 반복문
예제 : 사각형 모양 출력하기
예제 : 구구단(p.140) 66 2중 중첩된 for문을 사용하여 구구단을 출력하는 프로그램을 작성하시오. 한 줄에 한 단씩 출력한다. public class NestedLoop { public static void main (String[] args) { int i, j; for (i = 1;i < 10; i++,System.out.println()) { for (j = 1;j < 10; j++,System.out.print('\t')) { System.out.print(i + "*" + j + "=" + i*j); } 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 66
break 문
continue 문
LAB: 숫자 추측 게임
실습 p.146 도전
LAB: 로또 확률 계산
SOLUTION
Q & A