프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
for
문 : 반복 횟수가 정해진 반복일 때 주로 사용
반복 여부를 결정짓는 조건식이 처음에 제시되므로 한번도 실행이 안될 수도 있음
for(초기식; 조건식; 증감식) {
수행될 코드;
}
while
문 : 반복 횟수가 정해지지 않은 반복일 때 주로 사용
반복 여부를 결정짓는 조건식이 처음에 제시되므로 한번도 실행이 안될 수도 있음
while(조건식) {
수행될 코드;
[증감식 or 분기문];
}
do ~ while
문: 반복 횟수가 정해지지 않은 반복일 때 주로 사용
반복 여부를 결정짓는 조건식 끝(아래쪽)에 제시되므로 무조건 한번은 실행 됨
for에 ~동안 이라는 뜻이 있음
즉, 조건식이 true인 동안 수행될 코드가 반복된다는 뜻
for
문 형태
for(초기식; 조건식; 증감식) {
수행될 코드;
}
true
면 문장 수행 후 증감식 연산false
면 수행하지 않음true
면 문장 수행 후 증감식 수행false
면 수행하지 않음false
가 나올 때까지 문장 수행for
문 예시
for(int i = 1; i <= 10; i++) {
System.out.println(i + “ 출력");
}
/*
1 출력
2 출력
…
9 출력
10 출력
*/
public class ForExample {
/* for문
* - 끝이 정해져 있는(횟수가 정해져있는) 반복문
* - 조건에 따라 한번도 수행되지 않을 수 있음
*
* [작성법]
*
* for(초기식; 조건식; 증감식){
* 반복 수행할 코드
* }
*
* - 초기식: for문을 제어하는 용도의 변수 선언
*
* - 조건식: for문의 반복 여부를 지정하는 식. (다음 반복 진행해?)
* 보통 초기식에 사용된 변수를 이용하여 조건식을 작성함.
*
* - 증감식: 초기식에 사용된 변수를
* for문이 끝날 때 마다 증가 or 감소 시켜
* 조건식의 결과를 변하게 하는 식
* */
public void ex1() {
// 1~10 출력하기
// => 1부터 10까지 1씩 증가하며 출력
// * 반복문은 조건식이 true일 때만 반복
for(int i = 1; i <= 10; i++) { // i = index의 약자
// 1) 초기식; 2) 조건식; 4) 증감식
// 3) 반복 수행될 코드
System.out.println("i : " + i);
}
}
public void ex2() {
// 3에서 7까지 1씩 증가하며 출력
for(int i = 3; i <= 7; i++) {
System.out.println("i : " + i);
}
}
public void ex3() {
// 1부터 입력받은 수까지 1씩 증가하며 출력
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
int input = sc.nextInt();
for(int i = 1; i <= input; i++) {
System.out.println("출력 : " + i);
}
}
public void ex4() {
// 1.0부터 입력받은 실수 까지 0.5씩 증가하며 출력
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
double input = sc.nextDouble();
for(double i = 1.0; i <= input; i += 0.5) {
System.out.println("출력 : " + i);
}
}
public void ex7() {
// 영어 알파벳 A 부터 Z까지 한줄로 출력 65 ~ 90
// ** char 자료형은? 유니코드
// ABCD...Z
for(char i = 'A'; i <= 'Z'; i++) {
System.out.print(i);
}
}
public void ex8() {
// 응용문제!
// 1부터 10까지 모든 정수의 합 구하기
// => 합계 : 55
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum += i;
}
System.out.println("합계 : " + sum);
}
public void ex9() {
// 1부터 20까지 1씩 증가하면서 출력
// 단, 5의 배수에 ( ) 를 붙여서 출력 => 조건
// ex) 1 2 3 4 (5) ... (20)
for(int i = 1; i <= 20; i++) {
if(i % 5 == 0) {
System.out.print("(" + i + ") ");
}else {
System.out.print(i + " ") ;
}
}
}
}
for(초기값1; 조건식1; 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2;
}
수행될 코드3;
}
for
문에 진입하면 수행될 코드1을 먼저 수행하고 두 번째 for
문에 진입하면, false
가 될 때까지 수행될 코드2를 수행 후 나오면, true
면 다시 반복// 중첩 반복문 실습
public void ex10() {
// 구구단 모두 출력하기
for(int dan = 2; dan <= 9; dan++) { // 2 ~ 9단까지 차례대로 증가
for(int su = 1; su <+ 9; su++) { // 각 단에 곱해질 수 1 ~ 9까지 차례대로 증가
System.out.printf("%2d X %2d = %2d", dan, su, dan*su);
}
System.out.println();
}
}
public void ex11() {
// 구구단 역순 출력
// 9단 ~ 2단까지 역방향
// 곱해지는 수는 1~9까지
for(int dan = 9; dan >= 2; dan--) { // 단 9 -> 2
for(int su = 1; su <= 9; su++) { // 수 1 -> 9
System.out.printf("%2d X %2d = %2d", dan, su, dan*su);
}
System.out.println();
}
}
public void ex12() {
// 12345
// 12345
// 12345
// 12345
// 12345
// 이중 for문을 이용해 위처럼 출력되도록 구현
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 5; j++) {
System.out.print(j);
}
System.out.println();
}
System.out.println("---------");
// 54321
// 54321
// 54321
for(int i = 1; i <= 3; i++) {
for(int j = 5; j >= 1; j--) {
System.out.print(j);
}
System.out.println();
}
}
public void ex13() {
// 1
// 12
// 123
// 1234
// ==========
// 4321
// 321
// 21
// 1
for(int i = 1; i <= 4; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j);
}
System.out.println();
}
System.out.println("==========");
for(int i = 4; i >= 1; i--) { // >= 쓸 때, 우측 값이 최저 값이 됨 (break 역할)
for(int j = i; j >= 1; j--) {
System.out.print(j);
}
System.out.println();
}
}
while(조건식) {
수행될 코드;
[증감식 or 분기문];
}
조건식이 true
일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후
true면 수행, 조건식이 false
가 될 때까지 수행
조건식이 false
가 되면 반복문 종료
{ }
안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요 → 무한 루프 방지int i = 1;
while(i <= 10) {
System.out.println(i + " 출력");
i++; // 시험
}
/*
1 출력
2 출력
…
9 출력
10 출력
*/
package edu.kh.control.loop;
import java.util.Scanner;
public class WhileExample {
/* while문
* - 별도의 초기, 증감식이 존재하지 않고
* 반복 종료 조건을 자유롭게 설정하는 반복문
*
* ** 확실히 언제 반복이 끝날지는 모르지만
* 언젠가 반복 조건이 false가 되는 경우 반복을 종료함
*
* [작성법]
* while( 조건식 ) {
* 조건식이 true일 동안 반복 수행될 구문
* }
*
* */
public void ex1() {
Scanner sc = new Scanner(System.in);
int input = 0;
while(input != 9) { // input이 9가 아닐 때 반복
System.out.println("========키오스크=========");
System.out.println("========메뉴선택=========");
System.out.println("1. 떡볶이");
System.out.println("2. 김밥");
System.out.println("3. 쫄면");
System.out.println("9. 종료");
System.out.print("메뉴 선택 >> ");
input = sc.nextInt();
switch(input) {
case 1: System.out.println("떡볶이 주문 완료"); break;
case 2: System.out.println("김밥 주문 완료"); break;
case 3: System.out.println("쫄면 주문 완료"); break;
case 9: System.out.println("키오스크를 종료합니다!"); break;
default: System.out.println("잘못 입력 하셨습니다.");
}
}
}
}
💡 이클립스 빨간색, 초록색, 노란색 등 하이라이트 생길 때, Coverage 창에서 X가 두개 겹쳐진 아이콘을 눌러주면 됨
do {
수행될 코드;
[증감식 or 분기문];
} while(조건식);
do 안의 내용 먼저 실행
조건식 확인 후 true
면 문장 수행, false
면 종료
while
뒤에 ;
꼭 필요
{ }
안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요while
과 do~while
의 차이점 do~while
은 조건문이 true
가 아니더라도 무조건 한 번 이상 수행int i = 1;
do {
System.out.println(i + "출력");
i++;
} while(i <= 10);
/*
1 출력
2 출력
…
9 출력
10 출력
*/
public void ex4() {
Scanner sc = new Scanner(System.in);
int input = 0;
int sum = 0;
// do ~ while은 최소 한번은 수행함
do {
System.out.print("정수: ");
input = sc.nextInt();
sum += input;
} while(input != 0);
System.out.println("합계: " + sum);
}
break
반복문에서는 break
문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문
for(int i = 1;; i++) { // 제일 가까운 반복문
System.out.println(i + " 출력");
if(i >= 10) {
break;
}
}
→ 좀 억지스럽지만, break
보여주려고 만든 예시
package edu.kh.control.branch;
public class BranchExample {
public void ex1() {
// 1부터 10까지 1씩 증가하며 출력하는 반복문 작성 (for문 사용)
// 단, 5를 출력하면 반복문을 멈춤 (if)
for(int i = 1; i <= 10; i++) {
System.out.println(i);
if(i == 5) {
break;
}
}
}
public void ex2() {
// 0이 입력될 때 까지 모든 정수 합 구하기
Scanner sc = new Scanner(System.in);
int input = 0;
int sum = 0;
while(true) {
System.out.print("정수입력: ");
input = sc.nextInt();
if(input == 0) {
break;
}
sum += input;
}
System.out.println("합계: " + sum);
}
}
for(초기값1; 조건식1; 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2;
break;
}
수행될 코드3;
[break;]
}
두 번째 for
문에 break
를 만날 경우 반복문을 나가 수행될 코드3을 수행 후 다시 첫 번째 for
문을 실행하지만
마지막 break
가 있다면 수행될 코드3을 수행 후 for
문을 완전히 빠져나감
반복문 내에서만 사용 가능하며
반복문 실행 시 continue
아래 부분은 실행하지 않고 반복문 다시 실행
for
문의 경우 증감식으로 이동, while(do~while)
문의 경우 조건식으로 이동
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용
for(int i = 1; i <= 10; i++) {
if(i % 2 == 0) {
continue;
}
System.out.println(i + " 출력");
}
→ 홀수만 출력됨
public void ex3() {
// break: 반복문을 바로 멈춤
// continue: 다음 반복으로 넘어감
// 3의 배수 제외하고 1~10까지 출력
for(int i = 1; i <= 10; i++) {
if(i % 3 == 0) {
continue;
}
System.out.print(i + " ");
}
}
package edu.kh.control.branch;
import java.util.Scanner;
public class BranchExample {
public void ex1() {
// 1부터 10까지 1씩 증가하며 출력하는 반복문 작성 (for문 사용)
// 단, 5를 출력하면 반복문을 멈춤 (if)
for(int i = 1; i <= 10; i++) {
System.out.println(i);
if(i == 5) {
break;
}
}
}
public void ex2() {
// 0이 입력될 때 까지 모든 정수 합 구하기
Scanner sc = new Scanner(System.in);
int input = 0;
int sum = 0;
while(true) {
System.out.print("정수입력: ");
input = sc.nextInt();
if(input == 0) {
break;
}
sum += input;
}
System.out.println("합계: " + sum);
}
public void ex3() {
// break: 반복문을 바로 멈춤
// continue: 다음 반복으로 넘어감
// 3의 배수 제외하고 1~10까지 출력
for(int i = 1; i <= 10; i++) {
if(i % 3 == 0) {
continue;
}
System.out.print(i + " ");
}
}
public void ex4() {
// 1~100까지 1씩 증가하며 출력하는 반복문
// 단, 5의 배수는 건너뛰고, 증가하는 값이 40이 되었을 때 반복 멈춤
for(int i = 1; i <= 100; i++) {
// if(i % 5 == 0) {
// continue;
// }else if(i >= 40) { // 40 == 0 으로 하면, continue 조건에서 넘어가서 이 부분을 만나지 않음
// break;
// }
if(i == 40) {
break;
}else if(i % 5 == 0) {
continue;
}
System.out.println(i);
}
}
}