자바의정석4(제어문)
01. 조건문과 반복문(제어문, flow control statement)
- 조건문 : 조건을 만족할 때만 {}를 수행(0~1번)
if(score) {
System.out.println("합격입니다.");
System.out.println("축하드립니다.");
}
- score가 참이면 합격입니다. 축하드립니다. 출력
- score가 거짓이면 아무런 값도 출력되지 않는다
- 반복문 : 조건을 만족하는 동안 {}를 수행(0~n번)
int i = 10;
while(i-- > 0) {
System.out.println(i);
}
- while문의 (조건)이 참일 때 까지 {}가 반복 실행
- 10 9 8 7 6 5 4 3 2 1 // 출력
- 조건이 거짓이면 한번도 실행되지 않는다
-
조건식의 다양한 예
-
블럭({})
- 여러 문장을 하나로 묶어주는 것
- 단일 문장일 경우 {} 생략 가능
1. 조건문(if문)
if문
- 조건식이 참(true)일 때, 괄호 {}안의 문장들을 수행
if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다
}
if ( score > 60) {
System.out.println("합격입니다");
}
if-else문
- 둘 둥의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리
if (조건식) {
// 조건식이 참일 때 수행될 문장들을 적는다
} else {
// 조건식이 거짓일 때 수행될 문장들을 적는다
}
if ( score > 60) {
System.out.println("합격입니다");
} else {
System.out.println("불합격입니다");
}
if-else if문
- 여러 개 중의 하나 - 여러 개의 조건식을 포함한 조건식
if (조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 마지막은 보통 else 블럭으로 끝내며, else 블럭은 생략 가능
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
if ( score > 90) {
System.out.println("1지망 합격입니다");
} else if (score > 80) {
System.out.println("2지망 합격입니다");
} else if (score > 70) {
System.out.println("3지망 합격입니다");
} else if (score > 60) {
System.out.println("4지망 합격입니다");
} else {
System.out.println("불합격입니다");
}
중첩 if문 - if문 안의 if
if (조건식1) {
if (조건식2) {
// 조건식1과 조건식2가 모두 true일 때 수행될 문장들
} else {
// 조건식1이 true이고, 조건식2가 false일 때 수행되는 문장들
}
} else {
// 조건식1이 false일 때 수행되는 문장들
}
if (score > 60) {
if (score > 80) {
System.out.println("1급 합격입니다");
} else {
System.out.println("2급 합격입니다");
}
} else {
System.out.println("불합격입니다");
}
2. 조건문(switch문)
- 처리해야 하는 경우의 수가 많을 때 유용한 조건문
- case의 실행문은 break를 만날 때 까지 실행되거나 default나 switch문 끝까지 실행
switch (조건식) {
case 값1 :
// 조건식의 결과가 값1과 같은 경우 수행될 문장들
// ...
break;
case 값2 :
// 조건식의 결과가 값2와 같은 경우 수행될 문장들
// ...
break;
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
// ...
}
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 :
System.out.println("겨울");
}
switch문의 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다
- case문의 값은 정수, 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다
3. 난수 만들기(임의의 정수, 임의의 실수)
- Math.random() : 0.0과 1.0사이의 임의의 double값을 반환
- 0.0 <= Math.random() < 1.0
- 1 ~ 3 사이의 난수를 구하고 싶다
-> 0.0 3 <= Math.random() 3 < 1.0 3
-> 0.0 <= Math.random() 3 < 3.0
-> (int)0.0 <= (int)(Math.random() 3) < (int)3.0
-> 0 <= (int)(Math.random() 3) < 3
-> 0 + 1 <= (int)(Math.random() 3) + 1 < 3 + 1
-> 1 <= (int)(Math.random() 3) + 1 < 4
-> (int) (Math.random() * 3) + 1
4. 반복문 (for문)
for문
- 조건을 만족하는 동안 블럭{}을 반복 - 반복횟수를 알 때 적합
- 초기화는 가장 먼저 딱 한번 실행된다
- 조건 -> 수행 -> 증감이 조건이 참일 때 까지 수행되며 거짓이면 종료된다
for (초기화; 조건식; 증감식) {
수행될 문장
}
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// 0 1 2 3 4 5 6 7 8 9
for (int i = 0; i < 10; i = i+2) {
System.out.println(i);
}
// 0 2 4 8
// 각 자리수의 합
int num = 0, sum = 0;
System.out.print("숫자를 입려가세요.(예:1234)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
for(num; num > 0; num = num / 10) {
// num을 1-으로 나눈 나머지를 sum에 더함
sum += num%10; // sum = sum + num % 10;
System.out.printf("sum=%3d num=%d%n",sum, sum);
}
System,out.println("각 자리수의 합 : "+sum);
중첩 for문
- for문 내에 또 다른 for문을 포함시킬 수 있다
for (초기화; 조건식; 증감식) {
for (초기화; 조건식; 증감식) {
수행될 문장
}
}
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + "X" + j + "=" + i*j);
}
}
// 구구단
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
// 반 피라미드
4. 반복문 (while문)
- 조건을 만족시키는 동안 블럭{}을 반복 - 반복횟수 모를 때
while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다
}
int i = 5; // 반복 횟수
while (i-- != 0) {
System.out.println(i);
}
// 4 3 2 1 0
// 각 자리수의 합
int num = 0, sum = 0;
System.out.print("숫자를 입려가세요.(예:1234)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
while(num != 0) {
// num을 1-으로 나눈 나머지를 sum에 더함
sum += num%10; // sum = sum + num % 10;
System.out.printf("sum=%3d num=%d%n",sum, sum);
sum /= 10; // num을 10으로 나눈 값
}
System,out.println("각 자리수의 합 : "+sum);
5. 반복문 (do-while문)
- 블럭{}을 최소한 한 번 이상 반복 - 사용자 입력받을 때 유용
do {
// 조건식의 연살결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while (조건식);
int input = 0, answer = 0;
answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);
do {
System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();
if(input > answer) {
Sustem.out.println("더 작은 수로 다시 시도해보세요.");
} else if (input < answer) {
System.out.println("더 큰 수로 다시 시도해보세요.");
}
} while(input != answer);
System.out.println("정답입니다");
// while문으로 변경
int input = 0, answer = 0;
answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);
System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();
while(input != answer) {
if(input > answer) {
Sustem.out.println("더 작은 수로 다시 시도해보세요.");
} else if (input < answer) {
System.out.println("더 큰 수로 다시 시도해보세요.");
}
System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();
}
System.out.println("정답입니다");
6. break문
- 자신이 포함된 하나의 반복문을 벗어난다
while(true) {
if (sum > 100)
break;
++i;
sum += i;
7. continue문
- 자신이 포함된 반복문의 끝으로 이동 - 다음 반복으로 넘어감
- 전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용
for (int i = 0; i <= 10; i++) {
if (i%3 == 0)
continue;
System.out.println(i);
}
// 1 2 4 5 7 8 10
8. 이름붙은 반복문
- 반목문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다
// for문에 Loop1이라는 이름을 붙여준다
Loop1 : for(int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if(j==5)
break Loop1;
// break;
// continew Loop1;
// continue;
System.out.println(i + "X" + j + "=" + i*j);
} // end of for i
System.out.println();
} // end of Loop1
// 2 X 1 = 2, 2 X 2 = 4, 2 X 3 = 6, 2 X 4 = 8
Author And Source
이 문제에 관하여(자바의정석4(제어문)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ansalstmd/자바의정석기초4
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if(score) {
System.out.println("합격입니다.");
System.out.println("축하드립니다.");
}
- score가 참이면 합격입니다. 축하드립니다. 출력
- score가 거짓이면 아무런 값도 출력되지 않는다
int i = 10;
while(i-- > 0) {
System.out.println(i);
}
- while문의 (조건)이 참일 때 까지 {}가 반복 실행
- 10 9 8 7 6 5 4 3 2 1 // 출력
- 조건이 거짓이면 한번도 실행되지 않는다
조건식의 다양한 예
블럭({})
- 여러 문장을 하나로 묶어주는 것
- 단일 문장일 경우 {} 생략 가능
if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다
}
if ( score > 60) {
System.out.println("합격입니다");
}
if (조건식) {
// 조건식이 참일 때 수행될 문장들을 적는다
} else {
// 조건식이 거짓일 때 수행될 문장들을 적는다
}
if ( score > 60) {
System.out.println("합격입니다");
} else {
System.out.println("불합격입니다");
}
if (조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 마지막은 보통 else 블럭으로 끝내며, else 블럭은 생략 가능
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
if ( score > 90) {
System.out.println("1지망 합격입니다");
} else if (score > 80) {
System.out.println("2지망 합격입니다");
} else if (score > 70) {
System.out.println("3지망 합격입니다");
} else if (score > 60) {
System.out.println("4지망 합격입니다");
} else {
System.out.println("불합격입니다");
}
if (조건식1) {
if (조건식2) {
// 조건식1과 조건식2가 모두 true일 때 수행될 문장들
} else {
// 조건식1이 true이고, 조건식2가 false일 때 수행되는 문장들
}
} else {
// 조건식1이 false일 때 수행되는 문장들
}
if (score > 60) {
if (score > 80) {
System.out.println("1급 합격입니다");
} else {
System.out.println("2급 합격입니다");
}
} else {
System.out.println("불합격입니다");
}
switch (조건식) {
case 값1 :
// 조건식의 결과가 값1과 같은 경우 수행될 문장들
// ...
break;
case 값2 :
// 조건식의 결과가 값2와 같은 경우 수행될 문장들
// ...
break;
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
// ...
}
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 :
System.out.println("겨울");
}
- 0.0 <= Math.random() < 1.0
- 1 ~ 3 사이의 난수를 구하고 싶다
-> 0.0 3 <= Math.random() 3 < 1.0 3
-> 0.0 <= Math.random() 3 < 3.0
-> (int)0.0 <= (int)(Math.random() 3) < (int)3.0
-> 0 <= (int)(Math.random() 3) < 3
-> 0 + 1 <= (int)(Math.random() 3) + 1 < 3 + 1
-> 1 <= (int)(Math.random() 3) + 1 < 4
-> (int) (Math.random() * 3) + 1
- 초기화는 가장 먼저 딱 한번 실행된다
- 조건 -> 수행 -> 증감이 조건이 참일 때 까지 수행되며 거짓이면 종료된다
for (초기화; 조건식; 증감식) {
수행될 문장
}
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// 0 1 2 3 4 5 6 7 8 9
for (int i = 0; i < 10; i = i+2) {
System.out.println(i);
}
// 0 2 4 8
// 각 자리수의 합
int num = 0, sum = 0;
System.out.print("숫자를 입려가세요.(예:1234)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
for(num; num > 0; num = num / 10) {
// num을 1-으로 나눈 나머지를 sum에 더함
sum += num%10; // sum = sum + num % 10;
System.out.printf("sum=%3d num=%d%n",sum, sum);
}
System,out.println("각 자리수의 합 : "+sum);
for (초기화; 조건식; 증감식) {
for (초기화; 조건식; 증감식) {
수행될 문장
}
}
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + "X" + j + "=" + i*j);
}
}
// 구구단
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
// 반 피라미드
while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다
}
int i = 5; // 반복 횟수
while (i-- != 0) {
System.out.println(i);
}
// 4 3 2 1 0
// 각 자리수의 합
int num = 0, sum = 0;
System.out.print("숫자를 입려가세요.(예:1234)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
while(num != 0) {
// num을 1-으로 나눈 나머지를 sum에 더함
sum += num%10; // sum = sum + num % 10;
System.out.printf("sum=%3d num=%d%n",sum, sum);
sum /= 10; // num을 10으로 나눈 값
}
System,out.println("각 자리수의 합 : "+sum);
do {
// 조건식의 연살결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while (조건식);
int input = 0, answer = 0;
answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);
do {
System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();
if(input > answer) {
Sustem.out.println("더 작은 수로 다시 시도해보세요.");
} else if (input < answer) {
System.out.println("더 큰 수로 다시 시도해보세요.");
}
} while(input != answer);
System.out.println("정답입니다");
// while문으로 변경
int input = 0, answer = 0;
answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);
System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();
while(input != answer) {
if(input > answer) {
Sustem.out.println("더 작은 수로 다시 시도해보세요.");
} else if (input < answer) {
System.out.println("더 큰 수로 다시 시도해보세요.");
}
System.out.println("1과 100사이의 정수를 입력하세요.>");
input = scanner.nextInt();
}
System.out.println("정답입니다");
while(true) {
if (sum > 100)
break;
++i;
sum += i;
for (int i = 0; i <= 10; i++) {
if (i%3 == 0)
continue;
System.out.println(i);
}
// 1 2 4 5 7 8 10
// for문에 Loop1이라는 이름을 붙여준다
Loop1 : for(int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if(j==5)
break Loop1;
// break;
// continew Loop1;
// continue;
System.out.println(i + "X" + j + "=" + i*j);
} // end of for i
System.out.println();
} // end of Loop1
// 2 X 1 = 2, 2 X 2 = 4, 2 X 3 = 6, 2 X 4 = 8
Author And Source
이 문제에 관하여(자바의정석4(제어문)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ansalstmd/자바의정석기초4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)