프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 조건에 따라 다른 문장이 수행되도록 함
√ 조건문의 종류
if문
if(조건식1) {
수행될 코드;
} else if(조건식2) {
수행될 코드;
} else if(조건식3) {
수행될 코드;
} else {
수행될 코드;
}
switch문
switch(조건식) {
case 조건식 결과1 :
수행될 코드;
break;
case 조건식 결과2 :
수행될 코드;
break;
default :
수행될 코드;
}
√ if
if(조건식) {
수행될 코드
}
조건식의 결과 값이 true면 if문 내부 코드가 수행됨
false면 실행하지 않음
√ if문 예시
if(num > 0) {
System.out.println("양수입니다.");
}
√ if~else
if(조건식) {
true일 때 수행되는 코드
} else {
false일 때 수행되는 코드
}
조건식의 결과 값이 true이면 if 내의 코드가, false이면 else 내의 코드가 수행됨
√ if~else문 예시
if(num % 2 == 0) {
System.out.println("짝수");
} else {
System.out.println("홀수");
}
√ if~else if~else
if(조건식1) {
조건식1 true일 때 수행
} else if(조건식2) {
조건식2 true일 때 수행
} else {
모두 false일 때 수행
}
조건식1의 결과 값이 true면 if문 내 코드 수행
조건식2의 결과 값이 true면 else if 내 코드 수행
모두 false면 else 내 코드 수행
if(month == 1 || month == 2 || month ==12) {
season = "겨울";
} else if(month >= 3 && month <= 5) {
season = "봄";
} else if(month >= 6 && month <= 8) {
season = "여름";
} else if(month >= 9 && month <= 11) {
season = "가을";
} else {
season = "해당하는 계절이 없스니다.";
}
√ 중첩 if
if(조건식1) {
if(조건식2) {
if(조건식3) {
수행될 코드;
} else if(조건식4) {
수행될 코드;
} else {
수행될 코드;
}
} else if(조건식5) {
수행될 코드;
} else {
수행될 코드;
}
√ 중첩 if문 예시
if(month == 1 || month == 2 || month == 12) {
season = "겨울";
if(temperature <= -15) {
season += " 한파 경보";
} else if(temperature <= -12) {
seoson += " 한파 주의보";
}
} else if(month >= 3 && month <= 5) {
season = "봄";
} else if(month >= 6 && month <= 8) {
season = "여름";
if(temperature >= 35) {
season += " 폭염 경보";
} else if(temperature >= 33) {
seoson += " 폭염 주의보";
}
} else if(month >= 9 && month <= 11) {
season = "가을";
} else {
season = "해당하는 계절이 없습니다.";
}
package edu.kh.control.condition.ex;
import java.util.Scanner;
public class ConditionEx {
public void test1() {
System.out.println("test1() 수행");
}
public void test2() {
System.out.println("test2() 수행");
}
public void test3() {
System.out.println("test3() 수행");
}
// if 예시 1번
public void ex1() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int input = sc.nextInt();
/*조건식*/
if( input > 0 ) {
// 조건식이 true인 경우에만 if문 {} 내부 코드가 수행된다!
System.out.println("양수 입니다.");
System.out.println("ex1() 종료");
}
if ( input < 0 ) {
System.out.println("음수 입니다.");
System.out.println("ex1() 끝!");
}
}
// if 예시 2번 (if - else)
public void ex2() {
// 조건식이 true이면 if문 수행
// false이면 else문 수행
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력해주세요 : ");
int input = sc.nextInt();
if( input > 0 ) {
System.out.println("양수 입니다.");
} else {
// System.out.println("음수 입니다.");
// [중첩 if문]
if( input == 0 ) {
System.out.println("0 입니다.");
} else {
System.out.println("음수 입니다.");
}
}
}
// if 예시 3번 : if - else if - else
public void ex3() {
Scanner sc = new Scanner(System.in);
System.out.println("[홀짝 판별기]");
System.out.print("정수 입력 : ");
int input = sc.nextInt();
// 홀수, 짝수, 0
if (input==0) {
System.out.println("0은 홀/짝을 구분할 수 없습니다.");
} else if(Math.abs(input)%2==1) { // 홀수
// 절대값
System.out.println("홀수 입니다.");
} else {
System.out.println("짝수 입니다.");
}
}
// if 예시 4번
public void ex4() {
Scanner sc = new Scanner(System.in);
System.out.print("계절을 알고싶은 달(월)을 입력해주세요 : ");
int input = sc.nextInt();
// 조건문 결과를 저장할 문자열 변수 선언
String result;
if(input>=3 && input<=5) { // 3, 4, 5
// (input == 3 || input == 4 || input == 5) 도 가능
result = "봄";
} else if(input>=6 && input<=8) { // 6, 7, 8
result = "여름";
}else if(input>=9 && input<=11) { // 9, 10, 11
result = "가을";
}else if(input==12 || input==1 || input==2){ // 12, 1, 2
result = "겨울";
}else {
result = "해당하는 계절이 없습니다.";
}
// if - else if - else를 거치게 되면
// 무조건 result에 값이 하나 저장되어 있다!
System.out.println(result);
}
// if 예시 5번
public void ex5() {
// 나이를 입력 받아
// 13세 이하면 "어린이"
// 13세 초과 19세 이하면 "청소년"
// 19세 초과 "성인" 출력
// (0세 이하는 생각하지 않음)
Scanner sc = new Scanner(System.in);
System.out.println("나이 입력 : ");
int input = sc.nextInt();
String result;
if(input<=13) {
result = "어린이";
} else if(input<=19) {
result = "청소년";
} else {
result = "성인";
}
System.out.println(result);
}
// if 예시 6번
public void ex6() {
// 놀이기구 탑승 제한 검사
// 나이가 12세 이상, 키 140.0cm 이상일 경우에만 "탑승 가능"
// 나이가 12세 미만 : "적정 연령이 아닙니다."
// 키 140.0cm 미만 : "적정 키가 아닙니다."
// 나이를 0세 미만 또는 100세 초과 입력 시
// [실행화면]
// 나이 입력 : 15
// 키 입력 : 170.5
// 탑승 가능
/* 나이 제한 */
// 나이 입력 : 10
// 키 입력 : 150.5
// 적정 연령이 아닙니다.
/* 키 제한 */
// 나이 입력 : 12
// 키 입력 : 135.5
// 적정 키가 아닙니다.
/* 나이 0 미만 또는 100 초과 */
// 나이 입력 : 120
// 키 입력 : 183.5
// 잘못 입력 하셨습니다.
Scanner sc = new Scanner(System.in);
System.out.print("나이 입력 : ");
int age = sc.nextInt();
System.out.print("키 입력 : ");
double height = sc.nextDouble();
if(age<0||age>100) {
System.out.println("잘못 입력 하셨습니다.");
} else if(age<12) {
System.out.println("적정 연령이 아닙니다.");
} else if(height<140.0) {
System.out.println("적정 키가 아닙니다.");
} else {
System.out.println("탑승 가능");
}
}
// if 예제 6번 업그레이드
public void ex7() {
Scanner sc = new Scanner(System.in);
System.out.print("나이 입력 : ");
int age = sc.nextInt();
String result;
if(age<0||age>100) {
result = "잘못 입력 하셨습니다.";
} else if(age < 12) {
result = "적정 연령이 아닙니다.";
} else {
// else 내부에서는 age가 정상 입력으로 판단됨
System.out.print("키 입력 : ");
double height = sc.nextDouble();
if(height<100||height>220) {
result = "잘못 입력 하셨습니다.";
} else if(height<140) {
result = "적정 키가 아닙니다.";
} else {
result = "탑승 가능";
}
}
System.out.println(result);
}
}
조건식 하나로 많은 경우의 수 처리할 때 사용하며 이 때 조건식의 결과는 정수 또는 문자, 문자열 조건식의 결과 값과 일치하는 case문으로 이동
default문은 일치하는 case문이 없을 때 수행(=else)
√ switch문 예시
switch(num % 5) {
case 1:
team = "1조"; break;
case 2:
team = "2조"; break;
case 3:
team = "3조"; break;
case 4:
team = "4조"; break;
default:
team = "다시";
}
package edu.kh.control.condition.ex;
import java.util.Scanner;
public class SwitchEx {
/* Switch문 (switch-case문)
* - 식 하나의 결과로 많은 경우의 수를 처리할 때 사용하는 조건문
* -> 식의 결과에 맞는 case문이 수행됨
*
* [작성법]
* switch(식){ // 식 수행 결과는 true/false가 아닌 값(정수, 문자열 많이 씀)
* case 결과값1: 수행코드1; break;
* case 결과값2: 수행코드2; break;
* case 결과값3: 수행코드3; break;
* default: 모든 case가 만족하지 않을 경우 수행하는 코드;
* }
* */
public void ex1() {
// 키보드로 정수를 입력 받아서
// 1이면 "RED"
// 2이면 "ORANGE"
// 3이면 "YELLOW"
// 4이면 "GREEN"
// 1~4가 아니면 "BLUE" 를 출력
// sc -> ctrl + spacebar -> Scanner 선택
// => 자동완성(문구 완성, import 추가)
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력: ");
int input = sc.nextInt();
String result; // 결과를 저장할 변수
// 1) if-else if-else 버전
// if(input==1) {
// result = "RED";
// }else if(input==2) {
// result = "ORANGE";
// }else if(input==3) {
// result = "YELLOW";
// }else if(input==4) {
// result = "GREEN";
// }else {
// result = "BLUE";
// }
// System.out.println(result);
// 2) switch 버전
// switch 예시 1
switch(input){
case 1:
result = "RED";
break;
case 2:
result = "ORANGE";
break;
case 3:
result = "YELLOW";
break;
case 4:
result = "GREEN";
break;
default:
result = "BLUE";
}
System.out.println(result);
}
// switch 예시 2
public void ex2() {
// 랜덤 팀 배정 프로그램
// (백팀 0 , 청팀 1 , 홍팀 2)
// * Java에서 랜덤한 수(난수) 발생시크는 방법 *
// Math.random() : 난수 발생
// 1) 난수 발생 범위 : 0.0 <= random < 1.0
// 2) 발생한 난수의 자료형 : double
// + 실수 -> 정수 강제형변환 : 소수점 버림
// Math.random(); // 0.0 <= random < 1.0
// Math.random() * 3; // 0.0 <= random * 3 < 3.0
int random = (int)(Math.random() * 3); // 0 <= (int)(random * 3) < 3
String result;
switch(random) {
case 0: result = "백팀"; break;
case 1: result = "청팀"; break;
default: result = "홍팀";
}
System.out.println(result);
}
// switch 예시 3 : 식의 결과가 "문자열" (String)
public void ex3() {
// scan -> ctrl + spacebar -> enter
// ${:import(java.util.Scanner)}Scanner sc = new Scanner(System.in);${cursor}
Scanner sc = new Scanner(System.in);
// 메뉴를 입력 받아서 가격이 얼마인지 출력하기
System.out.print("메뉴를 입력하세요(김밥/라면/샌드위치/떡볶이) : ");
String input = sc.next();
int price; // 가격 저장할 변수 선언
switch(input) {
case "김밥": price = 4500; break;
case "라면": price = 3500; break;
case "샌드위치": price = 5800; break;
case "떡볶이": price = 4000; break;
default: price = -1;
// 잘못 입력한 경우에 사용하지 않는 숫자(-1)를 이용해서 표현
}
if(price != -1) {
System.out.printf("%s은(는) %d 입니다.", input, price);
} else { // price가 -1인 경우
System.out.println("존재하지 않는 메뉴입니다.");
}
}
// switch 예시 4
public void ex4() {
Scanner sc = new Scanner(System.in);
System.out.print("정수1 입력 : ");
int a = sc.nextInt();
System.out.print("연산자 입력 : ");
String op = sc.next();
System.out.print("정수2 입력 : ");
int b = sc.nextInt();
String st = "%d %s %d = %d"; // printf 출력 구문
switch(op) {
case "+": System.out.printf(st, a, op, b, a+b); break;
case "-": System.out.printf(st, a, op, b, a-b); break;
case "*": System.out.printf(st, a, op, b, a*b); break;
case "/":
if(b==0) {
System.out.println("0으로는 나눌 수 없습니다.");
} else {
System.out.printf("%d %s %d = %.2f", a, op, b, (double)a/b);
} break;
case "%":
if(b==0) {
System.out.println("0으로는 나눌 수 없습니다.");
} else {
System.out.printf(st, a, op, b, a%b);
} break;
default: System.out.println("존재하지 않는 연산자 입니다.");
}
}
// switch 예시 5 : break의 역할
// 계절 판별(switch version)
public void ex5() {
Scanner sc = new Scanner(System.in);
System.out.print("달(월) 입력 : ");
int month = sc.nextInt();
String result;
// break : 멈추다
// -> 해당 case를 수행한 후 멈춰라!
// -> break 미작성 시 다음 case가 연달아 수행된다!
// * case 마다 꼭 코드가 작성될 필요는 없다!
switch(month) {
case 12: case 1: case 2: result = "겨울"; break;
case 3: case 4: case 5: result = "봄"; break;
case 6: case 7: case 8: result = "여름"; break;
case 9: case 10: case 11: result = "가을"; break;
default: result = "잘못 입력 하셨습니다.";
}
System.out.println("계절 : " + result);
}
}
프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
제어문 중 하나로 특정 문장들을 반복해서 수행함
조건문 베이스 (true / false)
전에 무슨 상황이 있었고 앞으로 어떤 상황이 있을지 기억해야 함!
√ 반복문의 종류
for문
for(초기식; 조건식; 증감식) {
수행될 코드;
}
while문
while(조건식) {
수행될 코드;
[증감식 or 분기문];
}
√ for문(반복횟수가 정해져 있을 경우)
for(초기식; 조건식; 증감식) {
수행될 코드;
}
for(int i = 1; i <= 10; i++) {
System.out.println(i + " 출력");
}
int sum = 0;
for(int i=1; i<=100; i++) {
// 1부터 100까지 더하겠다.
sum += i; 누적해서
}
√ 실행 결과
1 출력
2 출력
...
9 출력
10 출력
00:00:00 시를 보고 분을 보고 초를 본다.
√ 표현식
for(초기값1; 조건식1; 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2;
}
수행될 코드3;
}
for문에 진입하면 수행될 코드1을 먼저 수행하고 두 번째 for문에 진입하면 조건식2가 false가 될 때까지 수행될 코드2를 수행 후 나오면 수행될 코드3을 수행하고 조건식1로 돌아와 true면 다시 반복
package edu.kh.control.loop.ex;
import java.util.Scanner;
public class ForEx {
/* for문
* - 끝이 정해져 있는 경우에 사용하는 반복문
* (== 반복 횟수가 지정되어 있는 경우 사용)
*
* - 작성법
* int a = 1 ; a < 3 ; a++
* for( [1]초기식 ; [2][5][8]조건식 ; [4][7]증감식 ){
*
* [3][6]조건식이 true일 때 반복 수행할 코드
*
* }
*
* // 1~4번 수행 후 조건식이 false가 나올 때 까지 5~7을 반복
*
* - 초기식 : for문을 제어하는 용도의 변수를 선언 및 초기화
*
* - 조건식 : for문의 반복 여부를 지정하는 식
* 조건식이 true인 경우에만 반복 수행을 함.
* 보통 초기식에 사용된 변수를 이용해서
* 조건식을 작성함.
*
* - 증감식 : for문이 한 번 반복을 수행할 때 마다
* 마지막에 특정 값을 증가 또는 감소 시키는 식
* 보통 초기식에 사용된 변수를 증가/감소 시켜
* 조건식의 결과를 변화하게 만드는 용도
*
*
* */
// for문 기초 사용법 1
public void ex1() {
// 1~10까지 반복 출력
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.....
for( int num=1 ; num<=10 ; num++ ) {
// num은 1~10까지 1씩 증가하는 변수
System.out.println(num);
}
}
// for문 기초 사용법 2
public void ex2() {
// 5부터 12까지 1씩 증가하며 출력
for( int num=5 ; num<=12 ; num++) {
System.out.print(num + " ");
}
}
// for문 기초 사용법 3
public void ex3() {
// 3부터 20까지 2씩 증가하며 출력
for(int i=3; i<=20 ; i+=2) {
System.out.print(i + " ");
}
}
// for문 기초 사용법 4
public void ex4() {
// 1부터 100까지의 모든 정수의 합
int sum = 0; // i가 증가 하면서 변한 값들을 누적할 변수 선언
// 0으로 초기화 하는 이유 : 어떤 값을 더하든 영향이 없어서
for(int i=0; i<=100; i++) {
sum += i;
}
System.out.println("합계 : " + sum);
}
// for문 기초 사용법 5
public void ex5() {
// 두 정수를 입력 받아
// 두 정수 사이의 모든 정수의 합 출력하기
// (단, 첫 번째 입력 받는 정수가 무조건 작다고 가정)
Scanner sc = new Scanner(System.in);
System.out.print("정수 1 입력 : ");
int a = sc.nextInt();
System.out.print("정수 2 입력 : ");
int b = sc.nextInt();
int sum = 0;
for(int i=a;i<=b;i++) {
sum +=i;
}
System.out.printf("%d부터 %d까지 모든 정수의 합 : %d", a, b, sum);
}
// for문 기초 사용법 6
public void ex6() {
// 다른 자료형으로 for문 사용하기
// 10부터 20까지 0.5씩 증가하며 출력
for(double i = 10.5; i <= 20; i+=0.5) {
// 초기식을 int형을 지정하게 되는 경우 무한루프에
// 왜? i += 0.5 수행 시 10.5가 아닌
// 10으로(int형으로) 형변환되어 i에 대입되기 때문에
// i가 계속 10을 유지한다
// 해결 방법 : 초기식을 double 자료형으로 변경
System.out.println(i);
}
System.out.println("-----------------------");
// A-Z까지 모든 알파벳 출력하기
// 1) A(65), Z(90)의 유니코드 번호를 이용하기
for(int i = 65;i<=90;i++) {
System.out.print((char)i);
}
// 2) 유니코드 번호를 모를 때
System.out.println();
for(int i = 'A'; i<='Z';i++) {
System.out.print((char)i);
}
// 3) char 자료형은 문자형이지만 실제로는 정수를 저장한다!
System.out.println();
for(char i = 'A'; i<='Z';i++){
System.out.print(i);
}
}
// for문 응용 사용법 1
public void ex7() {
// 감소하기
// 10부터 1까지 1씩 감소하며 출력
for(int i = 10; i>=1; i--) {
System.out.println(i);
}
}
// for문 응용 사용법 2
public void ex8() {
// 입력, 합계(sum), for
// 정수 5개 입력 받아 합계 출력하기
Scanner sc = new Scanner(System.in);
int sum = 0;
for(int i=1;i<=5;i++) { // 1부터 5까지 1씩 증가 (5회 반복)
System.out.printf("정수 입력 %d : ", i);
sum += sc.nextInt();
}
System.out.println(sum);
}
// for문 응용 사용법 3
public void ex9() {
// ex8번 응용
// 정수를 몇 번 입력 받을지 먼저 입력하고
// 입력된 정수의 합계를 출력
// 입력 받을 정수의 개수 : 2
// 입력 1 : 3
// 입력 2 : 5
// 합계 : 8
Scanner sc = new Scanner(System.in);
System.out.print("입력 받을 정수의 개수 : ");
int count = sc.nextInt();
int sum = 0;
for(int i=1;i<=count;i++) {
System.out.printf("입력 %d : ", i);
sum += sc.nextInt();
}
System.out.println("합계 : " + sum);
}
// for문 응용 사용법 4
public void ex10() {
// for + if 동시 사용
// 1부터 10까지 반복하며 출력
// 단, 짝수일 경우 ()로 숫자를 감싸서 출력
// 1 (2) 3 (4) 5 (6) 7 (8) 9 (10)
for(int i=1;i<=10;i++) {
if(i%2==0) {
System.out.printf("(%d) ", i);
} else {
System.out.printf("%d ", i);
}
}
}
// for문 응용 사용법 5
public void ex11() {
// 1부터 10까지 1씩 증가하며 출력
// 단, 3의 배수의 경우 숫자를 [] 감싸서 출력
// 단, 5의 배수인 경우 숫자 대신 @ 출력
// 1 2 [3] 4 @ [6] 7 8 [9] @
for(int i=1;i<=10;i++) {
if(i%3==0) {
System.out.printf("[%d] ", i);
} else if(i%5==0) {
System.out.print("@ ");
} else {
System.out.printf("%d ", i);
}
}
}
// for문 응용 사용법 6
public void ex12() {
// for, if, printf
// 구구단 2단 출력하기
// 2 x 1 = 2
// 2 x 2 = 4
// 2 x 3 = 6
// 2 x 4 = 8
// 2 x 5 = 10
// 2 x 6 = 12
// 2 x 7 = 14
// 2 x 8 = 16
// 2 x 9 = 18
for(int i=1;i<10;i++) {
System.out.printf("2 x %d = %2d\n", i, 2*i);
}
}
// for문 응용 사용법 7
public void ex13() {
// 원하는 단을 입력 받아서 역순으로 출력
// 단 입력 : 3
// 3 x 9 = 27
// 3 x 8 = 24
// 3 x 7 = 21
// 3 x 6 = 18
// 3 x 5 = 15
// 3 x 4 = 12
// 3 x 3 = 9
// 3 x 2 = 6
// 3 x 1 = 3
Scanner sc = new Scanner(System.in);
System.out.print("단 입력 : ");
int num = sc.nextInt();
for(int i=9;i>=1;i--) {
System.out.printf("%d x %d = %2d\n", num, i, num*i);
}
}
// for문 응용 사용법 8
public void ex14() {
// 입력 받은 단의 구구단 출력하기
// 단, 입력 받은 단이 2~9사이가 아니라면
// "잘못 입력 하셨습니다." 출력
Scanner sc = new Scanner(System.in);
System.out.print("단 입력 : ");
int input = sc.nextInt();
if(input<2 || input>9) {
System.out.println("잘못 입력 하셨습니다.");
} else {
for(int i=1;i<=9;i++) {
System.out.printf("%d x %d = %2d\n", input, i, input*i);
}
}
}
// 중첩 반복문 기본 사용법 1
public void ex15() {
//12345
//12345
//12345
//12345
// 1), 2), 3) 코드를 위해 생각한 순서
for(int j=1;j<=4;j++) { // 3) 4회 반복
for(int i=1;i<=5;i++) { // 1) 12345
System.out.print(i);
}
System.out.println(); // 2) 줄바꿈(개행)
}
}
// 중첩 반복문 기본 사용법 2
public void ex16() {
// 1 2 3 4 5
// 2 4 6 8 10
// 3 6 9 12 15
// 4 8 12 16 20
// 5 10 15 20 25
for(int x=1;x<=5;x++) {
for(int i=1;i<=5;i++) {
System.out.printf("%3d", i*x);
}
System.out.println();
}
}
// 중첩 반복문 응용 사용법1
public void ex17() {
// 구구단을 2단 부터 9단가지 모두 출력하기
// 2x1=2 2x2=4 2x3=6
// 3x1=3 3x2=6 3x3=9
// 4x1=4 4x2=8 4x3=12
for(int dan=2;dan<=9;dan++) {
for(int num=1;num<=9;num++) {
System.out.printf("%dx%d=%2d ",dan,num,dan*num);
}
System.out.println();
}
}
// 중첩 반복문 응용 사용법2
public void ex18() {
//2중 for문을 이용하여 다음 모양을 출력하세요.
// 1
// 12
// 123
// 1234
for(int x=1;x<=4;x++) { // 4번 반복 (x=1,2,3,4)
for(int i=1;i<=x;i++) { // 한 줄 출력
System.out.print(i);
}
System.out.println(); // 개행
}
}
//중첩 반복문 응용 사용법3
public void ex19() {
//2중 for문을 이용하여 다음 모양을 출력하세요.
// 4
// 43
// 432
// 4321
for(int x=4;x>=1;x--) { // x=4, 3, 2, 1
for(int i=4;i>=x;i--) {
System.out.print(i);
}
System.out.println();
}
}
// 중첩 반복문 응용 사용법4
public void ex20() {
// 입력된 정수 : 3
// 321
// 21
// 1
// 입력된 정수 : 4
// 4321
// 321
// 21
// 1
Scanner sc = new Scanner(System.in);
System.out.print("입력된 정수 : ");
int input = sc.nextInt();
for(int x=input;x>=1;x--) {
for(int i=x;i>=1;i--) {
System.out.print(i);
}
System.out.println();
}
}
// 카운트(개수 세기)
public void ex21() {
// 1부터 20사이의 3의 배수의 합과 개수를 출력
// 3 6 9 12
// sum : 63
// count : 6
int sum = 0; // 합계 저장용 변수
int count = 0; // 카운트용 변수
for(int i=1;i<=20;i++) {
if(i%3==0) { // 3의 배수인 경우
sum += i; // 누적
count++; // 개수 증가(1)
}
}
System.out.println("sum : " + sum);
System.out.println("count : " + count);
}
// count를 이용한 2중 for문
public void ex22() {
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12
int count = 1; // 숫자를 세기위한 변수 선언
for(int i = 1;i<=3;i++) { // 3행
for(int j=1;j<=4;j++) { // 4열
System.out.printf("%3d",count++);
// 출력 후 1 증가(후위 연산)
}
System.out.println(); // 개행
}
}
}
√ while
while(조건식) {
수행될 코드;
[증감식 or 분기문];
}
조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후
true면 수행, 조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료
※ {} 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
√ while문 예시
int i = 1;
while(i <= 10) {
System.out.println(i + " 출력");
i++;
}
√ 실행 결과
1 출력
2 출력
...
9 출력
10 출력
√ do ~ while
do {
수행될 코드;
[증감식 or 분기문];
} while(조건식);
do 안의 내용 먼저 실행
조건식 확인 후 true면 문장 수행, false면 종료
while 뒤에 ; 꼭 필요
※ {} 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
※ while과 do~while의 차이점
do~while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행
√ while문 예시
int i = 1;
do {
System.out.println(i + " 출력");
i++;
} while(i <= 10);
√ 실행 결과
1 출력
2 출력
...
9 출력
10 출력
package edu.kh.control.loop.ex;
import java.util.Scanner;
public class WhileEx {
/* while문
*
* - 별도의 초기식, 증감식이 존재하지 않고
* 반복 조건만을 설정하는 반복문
*
* - 반복 횟수가 지정 되어있지 않은 반복에 사용
*
* [작성법]
* while(조건식){
* 조건식이 true인 경우 반복 수행할 구문
* }
* */
// while 기초 사용법 1
public void ex1() {
// 0이 입력 될 때 까지의
// 입력된 모든 정수의 합 출력하기
Scanner sc = new Scanner(System.in);
int input = -1; // 입력 받은 값을 저장할 변수
int sum = 0; // 합계 저장용 변수
while(input!=0) { // input이 0이면 종료
System.out.print("정수 입력 : ");
input = sc.nextInt();
sum += input; // 누적
System.out.println("현재 합계 : " +sum);
}
System.out.println("최종 결과 : " +sum);
}
// while 기초 사용법 2
public void ex2() {
// 분식집 주문 프로그램
// --- 메뉴 ---
// 1. 떡볶이(5000원)
// 2. 김밥(3000원)
// 3. 라면(4000원)
// 9. 주문 완료
// 메뉴 선택 >> 1
//
// --- 메뉴 ---
// 1. 떡볶이(5000원)
// 2. 김밥(3000원)
// 3. 라면(4000원)
// 메뉴 선택 >> 2
//
// --- 메뉴 ---
// 1. 떡볶이(5000원)
// 2. 김밥(3000원)
// 3. 라면(4000원)
// 메뉴 선택 >> 9
// 떡볶이 김밥을 주문하셨습니다.
// 총 가격은 8000원 입니다.
Scanner sc = new Scanner(System.in);
int input = 0; // 메뉴 번호를 입력 받을 변수
// input의 값은 while 조건이 false가 되지 않는 값을 작성하면 된다!
// -> 보통 자료형 범위의 중간값인 0을 사용하고 이를 기본값이라 한다!
int sum = 0; // 가격 합계 저장용 변수
String menu = ""; // 빈문자열
// 내용이 없는 String
while(input!=9) {
System.out.println("--- 메뉴 ---");
System.out.println("1. 떡볶이(5000원)");
System.out.println("2. 김밥(3000원)");
System.out.println("3. 라면(4000원)");
System.out.println("9. 주문 완료");
System.out.print("메뉴 선택 >> ");
input = sc.nextInt(); // 메뉴 번호 입력 받기
System.out.println(); // 개행
switch(input){
case 1:
sum += 5000;
menu += "떡볶이 ";
break;
case 2:
sum += 3000;
menu += "김밥 ";
break;
case 3:
sum += 4000;
menu += "라면 ";
break;
case 9:
break;
default: System.out.println("잘못 입력 하셨습니다.");
} // switch 끝
} // while 끝
System.out.printf("%s을/를 주문하셨습니다.\n", menu);
System.out.printf("총 가격은 %d입니다.\n", sum);
}
// do ~ while문 기초 사용법
public void ex3() {
// do ~ while문
// - 최초 1회를 무조건 수행하는 반복문
// (최소 1회 이상 반복을 보장하는 반복문)
Scanner sc = new Scanner(System.in);
int sum = 0;
int input = 0;
do{ // 일단 1회 실행
System.out.print("정수 입력 : ");
input = sc.nextInt();
sum += input;
System.out.println("현재 합계 : " + sum);
}while(input != 0); // 0 입력 시 종료
System.out.println("최종 결과 : " + sum);
}
// while문을 for문처럼 사용하기
public void ex4() {
// 1부터 10까지 반복해서 출력
// for문
for(int i = 1;i<=10;i++) {
System.out.print(i+" ");
}
System.out.println("\n====================");
// while문
int i = 1;
while(i<=10) {
System.out.print(i+" ");
i++;
}
}
}
√ break
반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문
√ break문 예시
for(int i = 1;; i++) {
System.out.println(i + " 출력");
if(i >= 10) {
break;
}
}
√ 중첩 반복문에서의 break
for(초기값1, 조건식1, 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2;
break;
}
수행될 코드3;
[break;]
}
두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 코드3을 수행 후 다시 첫 번째 for문을 실행하지만 마지막 break가 있다면 수행될 코드3을 수행 후 for문을 완전히 빠져나감
√ continue
반복문 내에서만 사용 가능하며 반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문 다시 실행
for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용
√ continue문 예시
for(int i=1; i<=10; i++) {
if(i%2 == 0) {
continue;
}
System.out.println(i + "출력");
}
package edu.kh.control.branch.ex;
import java.util.Scanner;
public class BranchEx {
// 분기문
// break : 가장 가까운 반복문을 멈춤(빠져나감)
// continue : 가장 가까운 반복문 시작 부분으로 이동(다음 반복으로 이동)
// break 예시 1
public void ex1() {
for(int i=1;i<=10000;i++) {
System.out.println(i);
if(i==20) { // i가 20인 경우
break; // 반복문 멈춤
}
}
}
// break 예시 2
public void ex2() {
// 0 입력 시 까지 입력된 정수 합 구하기
Scanner sc = new Scanner(System.in);
int sum = 0; // 합계 저장용 변수
int input = 0; // 입력 값 저장용 변수
while(true) { // 무조건 조건식 true == 무한 루프
System.out.print("정수 입력 : ");
input = sc.nextInt();
sum += input;
if(input==0) { // 입력 받은 값이 0인 경우
break; // while문 종료
}
}
System.out.println("합계 : "+sum);
// Unreachable code : 도달할 수 없는 코드
}
// break 예시 3
public void ex3() {
for(int row=1;row<=5;row++) {
for(int col=1;col<=5;col++) {
if(col==3) {
break; // 안쪽 for문 멈춤
// -> 2열 까지만 출력
}
System.out.printf("(%d, %d) ",row,col);
}
System.out.println();
if(row==4) {
break; // 바깥쪽 for문 멈춤
// -> 4행 까지만 출력
}
}
}
// continue 예시 1
public void ex4() {
// 1 2 3 4 5 6 7 8 9 10
for(int i=1;i<=10;i++) {
if(i%2==0) { // 짝수 일 경우
continue;
}
System.out.print(i + " ");
}
}
public void ex5() {
// 1~ 100까지 1씩 증가하며 출력하는 반복문
// 단, 5의 배수는 출력을 건너뛰고
// 증가하는 값이 40이 되었을 때 반복을 멈춰라
for(int i=1;i<=100;i++) {
// if(i==40){
// break;
// }
if(i%5==0) { // 5의 배수
if(i==40) {
break;
}else {
continue;
}
}
System.out.print(i+" ");
}
}
// 분기문 응용 1
public void upDownGame() {
// 1~50 사이의 난수를 하나 지정하여
// 사용자가 몇 회 만에 맞추는지 카운트하는 게임
// 난수 : Math.random
// count, while, break
// ex) 난수가 30인 경우
// 1번 입력 : 10
// UP
// 2번 입력 : 40
// DOWN
// 3번 입력 : 30
// 정답 입니다!(총 입력 횟수 : 3회)
Scanner sc = new Scanner(System.in);
int x = (int)(Math.random()*50+1);
int count = 1; // 반복 횟수 저장용 변수
while(true) { // 무한 반복
System.out.printf("%d번 입력 : ", count);
int input = sc.nextInt();
if(x>input) { // 입력값이 작은 경우
System.out.println("UP");
}else if(x<input) { // 입력값이 큰 경우
System.out.println("DOWN");
}else { // 입력 값 == 난수 (정답)
System.out.printf("정답 입니다!(총 입력 횟수 : %d회)", count);
break;
}
count++; // 카운트 증가
}
}
// 분기문 응용 2
public void ex6() {
// 시작 번호 부터 끝 번호까지 1씩 증가하며 출력하는 반복문
// 특정 수의 배수를 입력 받아 출력모양 변경
// 시작 : 5
// 종료 : 13
// 제외할 배수 : 6
// 5 [6] 7 8 9 10 11 [12] 13 14
Scanner sc = new Scanner(System.in);
System.out.print("시작 : ");
int st = sc.nextInt();
System.out.print("종료 : ");
int ed = sc.nextInt();
System.out.print("변경할 배수 : ");
int input = sc.nextInt();
// while(true) {
// if(st==ed) {
// System.out.print(st + " ");
// break;
// } else if(st%input==0) {
// System.out.printf("[%d] ", st);
// } else {
// System.out.print(st + " ");
// }
// st++;
// }
for(int i=st;i<=ed;i++) {
if(i%input==0) {
System.out.printf("[%d] ", i);
} else {
System.out.print(i + " ");
}
}
}
}