-
5. 반복문 (while문, do~while문, for문)개발자 수업/Java 2021. 10. 1. 23:18
1. while문
1) 조건이 참(true)인 동안 반복수행하기
2) 조건이 맞지 않으면 반복하던 수행을 멈추게 됨
3) 예) 달리는 자동차, 일정 횟수만큼 돌아가는 나사못,
4) while(조건식){
수행문1;
....
}
수행문2;package kr.co.ezenac.loop; public class WhileTest { public static void main(String[] args) { int sum = 0; int i = 1; /* * while문 옆에는 조건식만 들어가기 떄문에 * for문에 비해서 일반적 반복에서는 가독성이 떨어짐 * while문은 초기화하는 부분이 따로 존재하지 않음 */ while(i<=100) { sum += i; i++; } System.out.println("1~100까지의 합 : " + sum); /* * while문은 무한 루프용으로 많이 사용함 * if()문을 break와 함께 무한 루프를 벗어날 코드를 작성해야 함 */ int j = 1; while(true) { System.out.println(j); if(j>=100) { break; } j++; } } }
package kr.co.ezenac.loop; import java.util.Scanner; public class WhileTest02 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); boolean run = true; // flag 변수 int speed = 0; while(run) { System.out.println(); System.out.println("=============================="); System.out.println(" 1. 증속 | 2. 감속 | 3. 중지 "); System.out.println("=============================="); System.out.print("입력 : "); int choice = scan.nextInt(); if(choice == 1) { speed++; System.out.println("현재 속도 : " + speed); } else if(choice == 2) { speed--; System.out.println("현재 속도 : " + speed); } else if(choice == 3) { //break; //System.exit(0); run = false; } else { System.out.println("잘못된 입력 값입니다."); } } System.out.println("프로그램을 종료합니다."); scan.close(); } }
package kr.co.ezenac.loop02; import java.util.Scanner; /* * 사용자로부터 숫자를 입력받아서 * 해당 숫자가 음의 정수가 아닐 경우 * 음의 정수가 입력될 떄까지 다시 입력을 받는 프로그램을 구현하시오. * * 출력예시) * 음의 정수를 입력하세요 : 3 * 잘못 입력했습니다. * 음의 정수를 입력하세요 : 2 * 잘못 입력했습니다. * 음의 정수를 입력하세요 : -1 * 사용자가 입력한 음의 정수 : -1 */ public class WhileTest02 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("음의 정수를 입력하세요 : "); int number = scan.nextInt(); while(number >= 0) { System.out.println("잘못 입력했습니다."); System.out.print("음의 정수를 입력하세요 : "); number = scan.nextInt(); } System.out.println("사용자가 입력한 음의 정수 : " + number); scan.close(); } }
2. do ~ while문
1) 조건과 상관없이 한 번은 수행문을 수행
2) do {
수행문1;
...
} while(조건식);
수행문2;
...package kr.co.ezenac.loop02; import java.util.Scanner; public class DoWhileTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("메세지를 입력하세요."); System.out.println("프로그램을 종료하려면, q를 입력하세요."); String str = null; do { System.out.print(">"); str = scan.nextLine(); System.out.println("입력받은 메세지 : " + str); } while(!str.equals("q")); System.out.println("프로그램을 종료합니다."); scan.close(); } }
package kr.co.ezenac.loop02; /* * 5 * 4 * 6 * 0 (을 입력하면 종료하고 * 15 (이제껏 입력한 수의 합이 출력됨 */ import java.util.Scanner; public class DoWhileTest02 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print(""); int input; int sum = 0; do { input = scan.nextInt(); sum += input; } while(input!=0); System.out.println(sum); scan.close(); } }
3. for문
1 2 4
1) for(초기화식; 조건식; 증감식){
수행문; 3
...
}
수행 순서 : 1 - 2 - 3 - 4 - 2 - 3 - 4 ...package kr.co.ezenac.loop03; public class ForTest { public static void main(String[] args) { int sum = 0; // 1~100까지 합 for(int i=1; i<101; i++) { sum += i; System.out.println("sum : " + sum); } System.out.println("1~100까지의 합 : " + sum); } }
package kr.co.ezenac.loop03; /* * 2000이상일 때 i의 값 : * 2000이상일 때 sum의 값 : */ public class ForTest02 { public static void main(String[] args) { int sum = 0; for(int i=1; i<101; i++) { sum += i; if(sum>=2000) { System.out.println("2000이상일 때 i의 값 : " + i); System.out.println("2000이상일 때 sum의 값 : " + sum); break; } } } }
package kr.co.ezenac.loop03; public class GugudanTest { public static void main(String[] args) { for(int i=2; i<10; i++) { for(int j=1; j<10; j++) { System.out.println(i + "*" + j + "=" + (i*j)); } System.out.println(); } } }
package kr.co.ezenac.loop03; import java.util.Scanner; /* * 구구단을 출력합니다. * 몇 단부터 출력할까요? : 3 * 끝 단은 얼마인가요? : 5 * * =========3단========= * 3*1=3 * 3*2=6 * ... * 3*9=27 * =========4단========= * 4*1=4 * 4*2=8 * ... * 4*9=36 * =========5단========= * 5*1=5 * 5*2=10 * ... * 5*9=45 */ public class InputGugudanTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("구구단을 출력합니다."); System.out.print("몇 단부터 출력할까요? : "); int a = scan.nextInt(); System.out.print("끝 단은 얼마인가요? : "); int b = scan.nextInt(); for(int i=a; i<=b; i++) { System.out.println("=========" + i + "단========="); for(int j=1; j<10; j++) { System.out.println(i + "*" + j + "=" + (i*j)); } System.out.println(); } scan.close(); } }
4. 각 반복문의 쓰임
while문 do~while문 for문
------------------------------------------------------------------------------------------------------------------------
조건문이 참인 동안 반복 수행 조건문이 참인 동안 반복 수행 초기화, 조건체크, 증감 순으로 실행
조건문이 맞지 않으면 수행되는 수행문을 먼저 수행하고 조건을 체크
부분이 없음
------------------------------------------------------------------------------------------------------------------------
조건식의 결과나 변수가 true, false값인 경우 주로 사용 특정 수의 범위, 횟수와 관련하여
반복되는 경우 주로 사용
배열과 함께 많이 사용함
5. for문의 문장들은 생략 가능함
1) 초기화식 생략 : 이미 이전에 값이 초기화되어 for 내부에서 값을 지정할 필요가 없는 경우
int i = 0;
for( ; i<5; i++){
...
}
2) 조건식 생략 : 반복 수행에 대한 조건이 수행문 내부에 있는 경우
for(i=0; ; i++){
sum += 1;
if(sum>200) break;
}
3) 증감식 생략 : 증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결과값에 결정되는 경우
for(i=0; i<5; ){
i = (++i) % 10;
}
4) 무한반복
for( ; ; ){
...
}
6. 반복문이 여러 번 포개진 중첩 반복문
1) 중첩 반복문
- 반복문 내부에 또 다른 반복문이 있음
- 여러 겹으로 반복문을 겹쳐서 구현 가능
- 외부 반복문과 내부 반복문 간의 변수 값 변화에 유의하며 구현하여야 함7. 중간에 멈추는 break문, 무시하고 계속 진행하는 continue문
1) break문 사용하기
- 감싸고 있는 제어문의 블록을 빠져 나오는 기능 (switch문에서도 사용)
- 반복문에서 주로 조건문(if)과 같이 사용하여 조건에 해당되는 경우 반복 수행을 멈추고 외부로 수행이 이동// 1부터 숫자를 더하여 100이 넘는 순간의 숫자와 합을 출력 public class BreakTest { public static void main(String[] args) { int sum = 0; int num; for(num=1; ; num++) { sum += num; if(sum>=100) break; } System.out.println(sum); System.out.println(num); } }
2) continue문 사용하기
- 반복문 내부에서 조건문(if)과 같이 사용하며, 조건이 맞는 경우(true) 이후 반복문 블럭 내부의 다른 수행문들은 수행하지 않음public class ContinueTest { public static void main(String[] args) { // 1부터 100까지 숫자 중 3의 배수를 출력하시오 int num; for(num=1; num <= 100; num++) { if((num%3)!=0) continue; System.out.println(num); } System.out.println(); // 1~100까지 사이에서 짝수만 출력하시오 int x; for(x=1; x<=100; x++) { if((x%2)!=0) continue; System.out.println("짝수 : " + x); } System.out.println(); // 2와 3의 공배수만 출력하시오 for(int i=1; i<=100; i++) { if((i%2)==0 && (i%3)==0) { System.out.println("공배수 : " + i); } }System.out.println(); } }
'개발자 수업 > Java' 카테고리의 다른 글
8. 객체지향프로그래밍2 (0) 2021.10.05 6. Review / 7.객체지향프로그램 (0) 2021.10.04 210930 / if문, if else문, if else if문, switch case문, Math.random() (0) 2021.10.01 210929 / 대입 연산자, 부호 연산자, 산술 연산자, 증가&감소 연산자, 관계 연산자, 논리 연산자, 조건 연산자 (0) 2021.09.29 210929 / 진수, 변수, 부동 소수점 방식, 문자형, 논리형, 상수, 리터럴, 형변환 (0) 2021.09.29