제어문(반복문) - for문, 중첩 반복문, while문

oYJo·2024년 12월 17일

Java

목록 보기
9/25

반복문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함

~하는 동안

  • 반복문의 종류

for문 : 끝이 정해져 있는 반복
while문 : 끝이 정해져 있지 않는 반복

for문

  • for문

  • for문 예시

중첩 반복문

  • 표현식

for문에 진입하면 수행될 코드1을 먼저 수행하고 두 번째 for문에 진입하면 조건식2가 false가 될 때까지 수행될 코드2를 수행 후 나오면 수행될 코드3을 수행하고 조건식1로 돌아와 true면 다시 반복

class ForExample

package edu.kh.control.loop;

import java.util.Scanner;

public class ForExample {
	/* for문
	 * - 끝이 정해져 있는 (횟수가 지정되어 있는) 반복문
	 * 
	 * [작성법]
	 * for(초기식 ; 조건식 ; 증감식 ;) {
	 * 
	 * 		반복 수행할 코드
	 * 
	 * }
	 * 
	 * - 초기식 : for문을 제어하는 용도의 변수 선언
	 * 
	 * - 조건식 : for문의 반복 여부를 지정하는 식
	 * 			보통 초기식에서 사용된 변수를 이용하여 조건식을 작성함
	 * 
	 * - 증감식 : 초기식에 사용된 변수를
	 * 			for문이 끝날 때 마다 증가 또는 감소 시켜서
	 * 			조건식의 결과를 변하게 하는 식
	 * 
	 * */


	public void ex1() {
		// for문 기초 사용법1
		// - 1~10 출력하기
		// --> 1부터 10까지 1씩 증가하며 출력

		for(int i = 1 ; 	i <= 10 ; 		i++) {
			// 1) 초기식;	   2), 5) 조건식;   4) 증감식

			// 3), 6) 반복 수행할 코드
			System.out.println(i + "출력");

		}


		// 1, 2, 3, 4 수행 후 -> 5~7 반복(조건식이 true일 때 까지)

	}

	public void ex2() {
		// for 기초 사용법2

		for(int i = 3 ; i <= 7 ; i++){

			// 3에서 7까지 1씩 증가하며 출력
			//		-> i의 값이 7이하일 때 true가 되는 조건식
			System.out.println(i + "출력");
		}


		// 3 4 5 6 7

	}

	public void ex3() {
		// 2부터 17까지 1씩 증가하며 출력

		for(int i = 2; i <= 17 ; i++){
			System.out.println(i + " ");	
		}
	}


	public void ex4() {
		// 1부터 입력 받은 수까지 2씩 증가하며 출력

		Scanner sc = new Scanner(System.in);
		System.out.print("입력 받은 수: ");
		int num = sc.nextInt();

		for(int i = 1; i <= num  ; i = i + 2){
			// i = i + 2 -> 1에 기존 1값 + 2
			System.out.println(i + " ");
		}
	}

	public void ex5() {

		// 1부터 입력 받은 실수 까지 0.5씩 증가하며 출력
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 받은 실수 : ");
		double num = sc.nextDouble();

		for(double i = 1; i <= num  ; i = i + 0.5){

			System.out.println(i + " ");
		}
	}


	public void ex6() {

		// 영어 알파벳 A 부터 Z까지 한 줄로 출력

		// * char 자료형은 문자형이지만 실제로는 정수(문자표 번호)를 저장한다.		
		for(char i = 'A'; i <= 'Z' ; i++){

			System.out.println(i + " ");

		}

		for(int i = 'A'; i <= 'Z' ; i++){

			System.out.println((char)i + " ");
		}
	}

	public void ex7() {
		// 10에서 1까지 1씩 감소하며 출력

		for(int i = 10 ; i >= 1 ; i--) {
			System.out.println(i + " ");

		}

	}

	public void ex8() {
		// for문 응용 1 : 반복문을 이용한 값의 누적

		// 1부터 10까지 모든 정수의 합 구하기

		int sum = 0; // 반복되어 증가하는 i값의 합계를 저장할 변수
		// 0으로 시작하는 이유 : 아무것도 더하지 않음으로
		//					  정확히 결과를 도출할 수 있기 때문

		for(int i = 1 ; i <= 10 ; i++) {
			// sum = sum + i;
			sum += i;
			// System.out.println("합계 : " + sum); // 계속 추가되는 값 출력
		}
		System.out.println("합계 : " + sum); // 마지막 결과값만 출력

	}


	public void ex9() {
		// for문 응용 1 : 정수 5개를 입력 받아서 합계 구하기

		// ex)
		// 입력 1 : 10
		// 입력 2 : 20
		// 입력 3 : 30
		// 입력 4 : 40
		// 입력 5 : 50

		// 합계 : 150

		Scanner sc = new Scanner(System.in);

		int sum = 0; 

		for(int i = 1 ; i <= 5 ; i++) {

			System.out.print("입력 " + i + " : ");
			int input = sc.nextInt();
			sum += input; // sum에 입력 받은 input 값을 누적

			// System.out.println(input);
			// {} 안에서 생성된 변수는 {} 밖에서는 사용할 수 없다.
			// -> {} 끝나는 시점에 사라지기 때문에

		}

		// System.out.println(input); // 에러
		System.out.println("합계 : " + sum);
	}


	public void ex10() {

		// 정수를 몇 번 입력 받을지 먼저 입력 받고
		// 입력된 정수의 합계를 출력

		// ex)
		// 입력 받을 정수의 개수 : 3
		// 입력 1 : 10
		// 입력 2 : 20
		// 입력 3 : 30
		// 합계 : 60

		// ex)
		// 입력 받을 정수의 개수 : 2
		// 입력 1 : 10
		// 입력 2 : 20
		// 합계 : 30

		Scanner sc = new Scanner(System.in);
		System.out.print("입력 받을 정수의 개수 : ");
		int numInt = sc.nextInt();

		int sum = 0;

		for(int i = 1 ; i <= numInt ; i++) {

			System.out.print("입력 " + i + " : ");
			int input = sc.nextInt();
			sum += input; // sum에 입력 받은 input 값을 누적
		}

		System.out.println("합계 : " + sum);

	}		

	public void ex11() {
		// 1 부터 20 까지 1씩 증가하면서 출력
		for(int i= 1 ; i <= 20 ; i++) {
			if (i % 5 == 0) {
				System.out.printf(" (%d) ", i);
			}
			else {
				System.out.printf(" %d ", i);
			}


		}
		// 단, 5의 배수에 () 를 붙여서 출력
		// ex) 1 2 3 4 (5) 6 7 8 9 (10) 11 ...


	}

	public void ex12() {
		// 1 부터 20까지 1씩 증가하면서 출력
		// 단, 입력 받은 수의 배수는 () 표시

		// ex)
		// 괄호를 표시할 배수 : 3
		// 1 2 (3) 4 5 (6) ...

		// 괄호를 표시할 배수 : 4
		// 1 2 3 (4) 5 6 7 (8) 9 ...

		Scanner sc = new Scanner(System.in);
		System.out.print("괄호를 표시할 배수 : ");
		int num = sc.nextInt();

		for(int i= 1 ; i <= 20 ; i++) {
			if (i % num == 0) {
				System.out.printf(" (%d) ", i);
			}
			else {
				System.out.printf(" %d ", i);
			}
		}
	}

	public void ex13() {
		// [구구단 출력]
		// 2 ~ 9 사이 수를 하나 입력 받아
		// 해당 단을 출력
		// 단, 입력 받은 수가 2 ~9 사이 숫자가 아니면 "잘못 입력 하셨습니다" 출력

		Scanner sc = new Scanner(System.in);
		System.out.print("단 입력 : ");
		int dan = sc.nextInt();

		if (2 <= dan && dan <= 9) {
			for(int i= 1 ; i <= 9 ; i++) {
				System.out.printf("%d X %d = %d\n", dan, i, dan * i);
			}
		}
		else {
			System.out.println("잘못 입력 하셨습니다");

		}
	}


	public void ex14() {
		// [19단 출력기]
		// 2 ~ 19단 사이 단을 입력 받아서 x 1 ~ x 19 까지 출력
		// 단, 2 ~ 19 사이 단이 입력되지 않으면 "잘못 입력 하셨습니다." 출력

		Scanner sc = new Scanner(System.in);
		System.out.print("단 입력 : ");
		int dan = sc.nextInt();

		if (2 <= dan && dan <= 19) {
			for(int i= 1 ; i <= 19 ; i++) {
				System.out.printf("%d X %d = %d\n", dan, i, dan * i);
			}
		}
		else {
			System.out.println("잘못 입력 하셨습니다.");

		}
	}

	// *** 중첩 반복문 

	public void ex15() {
		// 구구단 모두 출력하기 
		Scanner sc = new Scanner(System.in);


		for(int dan = 2; dan <= 9; dan++) { // 2~9 단까지 차례대로 증가

			// 안쪽 for문이 반복하면서 하나의 단을 한 줄로 출력
			for(int i = 1; i <= 9; i++) {
				System.out.printf("%2d X %2d = %2d", dan, i, dan * i);

			}
			System.out.println(); // 아무 내용 없는 println() == 줄바꿈


		}

	}

	public void ex16() {
		// 구구단 역순 출력
		Scanner sc = new Scanner(System.in);


		for(int dan = 9; dan >= 2; dan--) { // 9단 -> 2단 까지 역방향
			for(int i = 1; i <= 9; i++) { // 수 1-> 9 정방향
				System.out.printf("%2d X %2d = %2d", dan, i, dan * i);
			} // 한 단의 출력 종료
			System.out.println(); // 줄바꿈

		}
	}


	public void ex17() {
		// 2중 for문을 이용해서 다음 모양을 출력하시오.

		// 12345
		// 12345
		// 12345
		// 12345

		Scanner sc = new Scanner(System.in);

		for(int x = 1; x <= 5; x++) {// 5바퀴 반복하는 for문
			for(int i = 1; i <= 5; i++) { // 12345
				System.out.print(i);
			}
			System.out.println(); // 줄바꿈

		}


		System.out.println("-------------------------");


		for(int x = 1; x <= 3; x++) {// 3바퀴 반복하는 for문
			for(int i = 5; i >= 1; i--) { // 54321
				System.out.print(i);
			}
			System.out.println(); // 줄바꿈

		}
	}

	public void ex18() {

		// 2중 for문을 이용하여 다음 모양을 출력하시오.

		// 1
		// 12
		// 123
		// 1234

		Scanner sc = new Scanner(System.in);


		for(int x = 1 ; x <= 4; x++) { // 4바퀴 반복
			for(int i = 1; i <= x; i++) { // 1 , 12
				System.out.print(i);
			}
			System.out.println(); // 줄바꿈
		}

		// x가 1일 때 i == 1
		// x가 2일 때 i == 1, 2
		// x가 3일 때 i == 1, 2, 3
		// x가 4일 때 i == 1, 2, 3, 4

		System.out.println("-------------------------");

		// 4321
		// 321
		// 21
		// 1

		for(int x = 5; x >= 1; x--) { // 5바퀴
			for(int i = x; i >= 1; i--) { // 4321
				System.out.print(i);
			}

			System.out.println(); // 줄바꿈

		}
	}


	public void ex19() {

		// count (숫자 세기)

		// 1부터 20까지 1씩 증가하면서
		// 3의 배수의 총 개수 출력

		// 3 6 9 12 15 18 : 6개


		int count = 0; // 3의 배수의 개수를 세기 위한 변수
		int sum = 0;
		for(int i = 1; i <=20; i++) { // 1부터 20까지
			if(i % 3 == 0) { // 3의 배수
				System.out.print(i + " ");
				count++; //  if문이 동작할 때마다 1씩 증가
				sum += i;
			}
		}
		System.out.printf(": %d개\n", count);
		System.out.printf("3의 배수의 합계 : %d\n", sum);


	}

	public void ex20() {

		// 2중 for문 count를 이용해서 아래 모양 출력하기
		// 1  2  3  4
		// 5  6  7  8
		// 9 10 11 12
		char count = 'a';
		for(int x=1; x<=3; x++) { // 3줄
			for(int i=1; i<=5; i++) { // 5칸
				System.out.printf("%3s", count);
				count++;
			}
			System.out.println();


		}
	}
}

class LoopRun

package edu.kh.control.loop;


public class LoopRun {

	// 메인 메소드 자동 완성
	// main -> ctrl + space
	public static void main(String[] args) {
		ForExample forEx = new ForExample();

		forEx.ex1();
		forEx.ex2();
		forEx.ex3();
		forEx.ex4();
		forEx.ex5();
		forEx.ex6();
		forEx.ex7();
		forEx.ex8();
		forEx.ex9();
		forEx.ex10();
		forEx.ex11(); 
		forEx.ex12();
		forEx.ex13();
		forEx.ex14();
		forEx.ex15();
		forEx.ex16();
		forEx.ex17();
		forEx.ex18();
		forEx.ex19();
		forEx.ex20();
	}
}

while문

  • while문

  • while문 예시

do~while문

  • do~while문

do 안의 내용 먼저 실행
조건식 확인 후 true면 문장 수행, false면 종료
while 뒤에 ; 꼭 필요

  • { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
  • while과 do~while의 차이점
    do~while은 조건문이 true가 아니더라도
    무조건 한 번 이상 수행
  • while문 예시

class WhileExample(ex1)

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 = sc.nextInt();
		while(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.println("메뉴 선택 >> ");
			input = sc.nextInt();

			// input 값에 따라서 case 선택
			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("잘못 입력하셨습니다");
			}
		} 
	}
	

class WhileExample(ex2)

public void ex2() {
		// 입력되는 모든 정수의 합 구하기
		// 단, 0이 입력되면 반복 종료 후 결과 출력
			// -> 0이 입력되지 않으면 계속 반복
		Scanner sc = new Scanner(System.in);
		
		int input = -1; // 입력 받은 값을 저장할 변수
		// 1) 0이 아닌 값을 대입하여 while문이 처음에 수행될 수 있도록 함
		
		
		int sum = 0; // 모든 정수의 합을 저장하는 변수
		
		while(input!=0) {
			System.out.println("정수 입력 : ");
			input = sc.nextInt();
					
			sum += input; //입력 받은 값을 sum에 누적
	
		}	
		System.out.println("합계 : " + sum);
	}

class WhileExample(ex3)

public void ex3() {
		// 입력되는 모든 정수의 합 구하기
		// 단, 0이 입력되면 반복 종료 후 결과 출력
			// -> 0이 입력되지 않으면 계속 반복
		Scanner sc = new Scanner(System.in);
		
		int input = 0; // 입력 받은 값을 저장할 변수
		
		int sum = 0; // 모든 정수의 합을 저장하는 변수
		
		// 2) while문을 최소 한 번은 수행하는 반복문
		// -> do ~ while
		
		do {
			
			System.out.println("정수 입력 : ");
			input = sc.nextInt();
					
			sum += input; //입력 받은 값을 sum에 누적
	
		} while(input!=0);
		 
		System.out.println("합계 : " + sum);
	}

}

class WhileRun

package edu.kh.control.loop;

public class WhileRun {
	public static void main(String[] args) {
		WhileExample whileEx = new WhileExample();

		whileEx.ex1();
		whileEx.ex2();
		whileEx.ex3();
	}
}
profile
Hello! My Name is oYJo

0개의 댓글