728x90
조건문
- if 문
- switch 문
if 문
- 조건식이 참(true)일 때, 괄호 { }안의 문장들을 수행함
- 수행할 문장이 한 줄이면 { } 생략할 수 있음 (비추)
if (조건식1) {
조건식1이 참(true)일 때 수행될 문장
} else if (조건식2) {
조건식2가 참(true)일 때 수행될 문장
} else {
조건식이 모두 거짓(false)일 때 수행될 문장
}
if 문 예제
// ex.1
import java.util.Scanner; // 스캐너 임포트
int score = 0; // 점수를 저장하기 위한 변수
char grade = ' '; // 학점을 저장하기 위한 변수. 공백으로 초기화시킴
System.out.println("점수를 입력하세요.");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt(); //화면을 통해 입력받은 숫자를 score에 저장
if (score >=90) {
grade ='A';
} else if (score>=80) {
grade = 'B';
} else if (score>=70) {
grade ='C';
} else {
grade = 'D';
}
System.out.println("당신의 학점은"+ grade + "입니다.");
// ex.2 else 생략시키기
import java.util.Scanner; // 스캐너 임포트
int score = 0; // 점수를 저장하기 위한 변수
char grade = 'D'; // 학점을 저장하기 위한 변수. 초기값을 else 값 대신 D로 설정
System.out.println("점수를 입력하세요.");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt(); //화면을 통해 입력받은 숫자를 score에 저장
if (score >=90) {
grade ='A';
} else if (score>=80) {
grade = 'B';
} else if (score>=70) {
grade ='C';
}
/*else {
grade = 'D';
} */ // else 값 생략
System.out.println("당신의 학점은"+ grade + "입니다.");
// ex.3
import java.util.Scanner; // 스캐너 임포트
int input;
System.out.println("숫자를 입력하세요");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); // 화면을 통해 입력 받은 내용을 tmp에 저장
input = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
if(input ==0) System.out.println("입력하신 숫자는 0 입니다");
if(input !=0) {
System.out.println("입력하신 숫자는 0 이 아닙니다.");
System.out.printf("입력하신 숫자는 %d 입니다", input);
}
switch 문
- 처리해야 하는 경우의 수가 많을 때 switch문이 더 효율적이지만 if 문보다 제약이 더 많음
- 조건식 값이 boolean 형태가 아닌 값임
- 조건식의 결과와 일치하는 case 문으로 이동함
- 조건식의 결과와 일치하는 case 문이 하나도 없는 경우에는 default 문으로 이동함
- break 문이나 switch 문의 끝을 만나면 switch 문 전체를 빠져나감.
- 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야한다.
- case문의 값은 정수 상수(문자포함), 문자열만 가능하며 중복되지 않아야한다. (변수는 쓸수 없음.)
int num, result;
final int ONE = 1;
switch(result) {
case '1': // ok. 문자 리터럴 사용가능 (정수 49와 동일)
break;
case ONE: // ok. 정수 상수 사용 가능
break;
case "YES": //ok. 문자열 리터럴 사용 가능
break;
// case num: // 에러. 변수 사용 불가
// break;
// case 1.0: //에러. 실수 사용 불가
// break;
}
예제
// ex.1
import java.util.Scanner; // 스캐너 임포트
System.out.println("현재 월을 입력하세요");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt(); // 화면을 통해 입력받은 숫자를 month에 저장
switch(month) {
case 3:
case 4:
case 5:
System.out.println("현재 계절은 봄입니다.");
break;
case 6: case 7: case 8:
System.out.println("현재 계절은 여릅입니다.");
break;
case 9: case 10: case 11:
System.out.println("현재 계절은 가을입니다.");
break;
default: // case 12: case 1: case 2:
System.out.println("현재 계절은 겨울입니다.");
}
// ex.2
import java.util.Scanner; // 스캐너 임포트
System.out.println("당신의 주민번호를 입력하세요.");
Scanner scanner = new Scanner(System.in);
String regNo = scanner.nextLine();
char gender = regNo.charAt(7); // 입력받은 번호의 8번째 문자를 gender에 저장
switch(gender) {
case '1' : case '3' :
switch(gender) {
case '1':
System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
break;
case '3':
System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
}
break;
case '2' : case '4':
switch(gender) {
case '2':
System.out.println("당신은 2000년 이전에 출생한 여자입니다.");
break;
case '4':
System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
}
break;
default:
System.out.println("유효하지 않은 주민등록번호입니다.");
}
난수 (임의의 정수) 만들기
- Math.random() → 0.0과 1.0 사이의 임의의 double 값을 반환
- 0.0 <= Math.random() < 1.0
1~3의 임의의 정수 구하기
- 각변에 3을 곱함 ( 원하는 정수 값의 개수 만큼 곱한다)
- 0.0 * 3 <= Math.random() * 3 < 1.0 * 3
- 0.0 <= Math.random() * 3 < 3.0
- 각 변을 int형으로 변환함
- (int) 0.0 <= (int)(Math.random() *3 ) < (int) 3
- 0 <= (int)(Math.random() *3) < 3
- 각 변에 1을 더함
- 0 + 1 <= (int)(Math.random() *3) + 1 < 3+1
- 1 <= (int)(Math.random() *3) +1 < 4
예제
// ex.1
//괄호 {} 안의 내용을 20번 반복한다.
//Quiz 01. 1~10 사이의 난수를 20개 출력하시오.
// 1,2,3,4,5,6,7,8,9,10 = 10개
for (int i =1; i<=20; i++) {
System.out.println( (int)(Math.random()*10)+1 );
}
// ex.2
//괄호 {} 안의 내용을 20번 반복한다.
//Quiz 02. -5~5 사이의 난수를 20개 출력하시오.
// 5-,-4,-3,-2,-1,0,1,2,3,4,5 = 11개
for (int i =1; i<=20; i++) {
System.out.println((int)( Math.random()*11)-5 ); // -5<= x <6
}
// ex.3
import java.util.Scanner;
System.out.println("가위(1), 바위(2), 보(3) 중 하나를 입력하세요");
Scanner scanner = new Scanner(System.in);
int user = scanner.nextInt();
int com = (int)(Math.random()*3)+1; // 1,2,3 중 하나가 com에 저장됨
System.out.printf("당신은 %d 입니다.", user);
System.out.printf("컴은 %d 입니다.", com);
switch(user - com) {
case 2: case -1:
System.out.println("당신이 졌습니다.");
break;
case 1: case -2:
System.out.println("당신이 이겼습니다.");
break;
case 0:
System.out.println("비겼습니다.");
반복문
- for 문
- while 문
- do while 문
for 문
- 조건을 만족하는 동안 블럭{ }을 반복 → 반복횟수를 알 때 적합
- 초기화, 조건식, 증감식 생략 가능
for (초기화; 조건식; 증감식) {
수행될 문장
}
// 초기화, 조건식, 증감식 생략
// 조건식 생략시 기본값인 true 값으로 인식
for (;;) {
수행될 문장
}
for (int i = 1, j=10; i<=10; i++, j--){ // , 를 이용해서 변수 여러개 작성 가능
System.out.println("i="+i+",j="+j);
}
향상된 for문
- 타입은 배열 또는 컬렉션의 요소의 타입이어야 함
- 향상된 for문은 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있음
for (타입 변수명 : 배열 또는 컬렉션){
// 반복할 문장
}
// ex.1
int[] arr = {10,20,30,40,50};
for (int tmp : arr){
System.out.print(tmp); // 10 20 30 40 50 60
}
예제1
int[] arr = {10, 20, 30 ,40 ,50};
for (int i=0; i<arr.length;i++) System.out.printf("%d", arr[i]); // 1020304050
System.out.println();
for(int tmp : arr) System.out.printf("%d", tmp); // 1020304050
while 문
- 조건을 만족시키는 동안 블록 { } 반복 - 반복횟수 모를 때
- 초기화나 증감식이 필요하지 않은 경우라면, for문보다 while문이 더 적합함
- 조건식 생략 불가
while (조건식) {
// 조건식의 연산 결과가 참(true)인 동안, 반복될 문장들
}
예제
// ex.1
int sum = 0;
int i = 0;
while (sum <=100) {
System.out.println("%d - %d%n", i, sum);
sum += ++i;
}
// ex.2 입력받은 값의 각 자리수의 합 구하기
import java.util.*;
int num = 0, sum = 0;
System.out.println("숫자를 입력하세요.");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); // 화면에 입력받은 내용을 tmp 에 저장
num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
while (num>0){
// num 을 10으로 나눈 나머지를 sum에 더함
sum += num%10;
System.out.printf("sum=%d num=%d%n", sum, num);
num /= 10;
}
System.out.println("각 자리수의 합:" + sum);
// ex.3 ex.2를 for 문으로 바꾸기
import java.util.*;
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); // 화면에 입력받은 내용을 tmp 에 저장
num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
for (; num>0; num /=10) {
sum += num%10;
}
System.out.println(sum);
// ex.4
int i = 5;
while(i--!=0) { // 조건식이 평가된 후에 i가 감소함. 그래서 i 값에 5가 출력이 안됨
System.out.print(i); // 4,3,2,1
// ex.5
int num=0, sum=0;
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
while(num!=0) {
sum += num%10; // num 을 10으로 나눈 나머지를 sum에 더함
System.out.printf("sum = %d, num = %d%n", sum, num);
num /=10; // num 을 10으로 나눈 값을 다시 num에 저장
}
System.out.println("각 자리수의 합:" + sum);
}
/* 출력값
예) 12345
sum = 5, num = 12345
sum = 9, num = 1234
sum = 12, num = 123
sum = 14, num = 12
sum = 15, num = 1
각 자리수의 합:15
*/
// ex.6
int sum=0, i=0;
while((sum += ++i)<=100) { // i 를 1씩 증가시켜서 sum에 계속 더해나감
System.out.printf("%d - %d%n", i , sum);
}
/* 출력값
1 - 1
2 - 3
3 - 6
4 - 10
5 - 15
6 - 21
7 - 28
8 - 36
9 - 45
10 - 55
11 - 66
12 - 78
13 - 91
*/
do - while 문
- 블럭 { } 을 최소한 한 번 이상 반복 - 사용자 입력 받을 때 유용
- 블럭 { } 을 먼저 수행한 후에 조건식을 평가함
do{
조건식의 연산결과가 참일 때 수행될 문장을 적음 (처음 한 번은 무조건 실행)
} while (조건식);
//ex.1 1~100 사이의 임의의 정수 맞추기
int input = 0, answer = 0;
answer = (int)(Math.random() * 100) + 1; // 1~100 사이의 임의의 정수
Scanner scanner = new Scanner(System.in);
do {
System.out.println("1과 100 사이의 정수를 입력하세요.");
input = scanner.nextInt();
if (input > answer) {
System.out.println("더 작은 수를 입력하세요");
} else if (input < answer) {
System.out.println("더 큰 수를 입력하세요");
}
} while (input != answer);
System.out.println("정답입니다.");
// ex.2
for(int i =1; i<=33; i++) {
System.out.printf("i = %d",i);
int tmp = i; // i 는 for문의 제어변수이기 때문에 다른 변수에 저장해야함
do {
if(tmp%10%3 ==0 && tmp%10!=0) { // tmp%10 이 3의 배수인지 확인 (0읜 제외)
System.out.print("짝");
} // end of if
} while((tmp/=10)!=0); // 앞자리 수 3의 배수 확인하기
System.out.println();
} // end of for
break 문
- 자신이 포함된 가장 가까운 반복문을 벗어난다
countinue 문
- 자신이 포함된 반복문의 끝으로 이동 - 다음 반복으로 넘어감
- 전체 반복 중에서 특정 조건시 반복을 건너뒬 때 유용
import java.util.*;
int menu =0, num=0;
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.println("원하는 메뉴 (1~3)를 선택하세요. (종료:0)");
String tmp = scanner.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
menu = Integer.parseInt(tmp);
if (menu==0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (!(1<=menu && menu <=3)) {
System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)");
continue;
}
System.out.println("선택하신 메뉴는"+ menu + "번입니다.");
}
이름붙은 반복문
- 반복문에 이름을 붙여서 break문 또는 continue문에 반복문 이름을 써서 하나 이상의 반복문을 벗어날 수 있게 함
// ex.1
Loop1: for (int i = 2; i <=9; i++) {
for (int j = 1; j<=9; j++) {
if (j==5) {
break Loop1; // Loop1 반복문까지 탈출함
}
System.out.println(i+"*"+j+"="+ i*j);
}
System.out.println();
}
// ex.2
import java.util.*;
int menu =0, num=0;
Scanner scanner = new Scanner(System.in);
outer: while(true) {
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.println("원하는 메뉴 (1~3)를 선택하세요. (종료:0)");
String tmp = scanner.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
menu = Integer.parseInt(tmp);
if (menu==0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (!(1<=menu && menu <=3)) {
System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)");
continue;
}
for(;;) {
System.out.println("계산할 값을 입력하세요. (계산 종료:0, 전체종료:99)");
tmp = scanner.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
if (num == 0)
break; // 계산 종료 for 문을 벗어난다
if (num == 99)
break outer; // 전체 종료. for문과 while문 모두 벗어난다
switch(menu){
case 1:
System.out.println("result =" + num*num);
break;
case2:
System.out.println("result =" + Math.sqrt(num));
break;
case3:
System.out.println("result =" + Math.log(num));
break;
}
} //for 문 끝
System.out.println("선택하신 메뉴는"+ menu + "번입니다.");
} // while 문 끝
728x90
'[자바] > 자바의 정석 - 3판' 카테고리의 다른 글
Chapter06. 객체지향 (0) | 2021.09.25 |
---|---|
Chapter.05 배열 (0) | 2021.08.29 |
Chapter03. 연산자 (0) | 2021.08.26 |
Chapter 02-2 진법 (0) | 2021.08.25 |
Chapter 02. 변수 (0) | 2021.08.18 |