java 반복문 (while, do-while, for)

songmin jeon·2023년 11월 23일
0

1. 반복문

어떤 조건에 만족할 때까지 같은 처리를 반복하여 실행하는 구조. (제어문)

  • 어디서 부터 어디까지 반복시킬지 정하는 것이 중요함.

1.1. while문

반복 횟수가 정해지지 않은 경우 자주 사용함.

  1. 검사조건을 파악 (true, false)
  2. true일때 실행문자 실행
  3. 검사조건이 true일 경우 1 ~ 2번 반복
  4. 검사조건이 false일 경우 while문 종료

// Hello World를 5번 출력
// 반복횟수를 제어해줄 정수형 num 선언하기

// while문 반복 (예제 1)	
    int num = 0;
		// 조건식 반복문
		while (num < 6) {
			System.out.println("Hello World!");
			num++;
		}		
		
        
// while문 반복 (예제 2)
		int num2 = 0;
		// 무한 반복문
		while(true) {
			System.out.println("산대특 클라우드기반 인공지능");
			num2++;
			
            // if문으로 5번 조건 설정
			if (num2 >= 5) {
				break;	// 반복을 멈추는 키워드
			}
		}

1.1.1. while문 예제 문제

/*
while문을 사용하여 키보드로 부터 입력받은 수가 10보다 작거나 
같은때만 계속 정수를 입력 받으세요. 10보다 큰 수를 입력하면 
"종료되었습니다"를 출력
*/
		while(true) {
			System.out.print("정수 입력 : ");
			int num = sc.nextInt();
			
			totalNum += num;
			System.out.println("누적결과 : " + totalNum);
			
			if (num == -1) {
				totalNum += num;
				System.out.println("종료되었습니다.");
				break;
			}
		}
        
        
/*
* 숫자를 입력 받아 홀수와 짝수가 각각몇개 입력되었는지 
* 출력하는 프로그램을 작성하시오.
* -1을 입력한 경우 프로그램 종료.
*/
		int count1 = 0;
		int count2 = 0;

		while(true){
			Scanner sc = new Scanner(System.in);
			System.out.print("숫자 입력 : " );
			int num = sc.nextInt();
			
			if(num % 2 == 0){
				count1++;
				System.out.println("짝수개수 : " + count1);
				System.out.println("홀수개수 : " + count2);
			} else if (num == -1) {
				System.out.println("종료되었습니다.");
				break;
			} else {
				count2++;
				System.out.println("짝수개수 : " + count1);
				System.out.println("홀수개수 : " + count2);
			}
		}

1.2. do-while문

  • do 영역은 반드시 한번 실행함.

1.2.1. 실습문제

	/*
	* do-while문 예제 - 몸무게 관리 프로그램
	* 1. 현재 몸무게와 목표 몸무게를 입력 받으세요.
	* 2. 주 차별 감량 몸무게를 입력 받으세요.
	* 3. 현재 몸무게가 목표 몸무게에 달성하면 
	* 	  축하한다는 문구를 출력하고 종료한다.
	*/
		
		Scanner sc = new Scanner(System.in);
		int week = 0;	// 주 차 증감자
		int manus = 0;	// 주 차별 감량 몸무게
		
		//현재 몸무게와 현재 몸무게 입력받음
		System.out.print("현재 몸무게를 적으세요 : ");
		int weight = sc.nextInt();		//현재 몸무게
		System.out.print("목표 몸무게를 적으세요 : ");
		int goalWeight = sc.nextInt();	//목표 몸무게
		
		System.out.println("현재 몸무게 : " + weight);
		System.out.println("목표 몸무게 : " + goalWeight);
		
		do {
			week++;
			System.out.print(week+"주차 감량 몸무게 : ");
			manus = sc.nextInt();

			weight -= manus;
			
			if (weight == goalWeight) {
				break;
			}
			
		} while(weight >= goalWeight) ;
		
		System.out.print(weight+"kg 달성!! 축하합니다!!");


	/*
	 * do-while문 예제 - pius game 
     1. 랜덤으로 정수 2개를 뽑아 문제를 출력하시오. 
     2. 사용자로부터 두 수의 합과 일치하면 * :성공: 
     3. 입력 받은 값이 "실패.."를 출력해주세요. 
     4. 실패하면 다시하겠습니까? 물어보고 N하면 게임 종료
	 * 
	 */

		// 랜덤한 숫자 뽑아서 더하기 게임
		Scanner sc = new Scanner(System.in);
		// 1. 랜덤한 숫자 생성하는 도구 꺼내오기
		Random ran = new Random();

		System.out.println("=====Plus Game=====");
		do {
			// 2. 랜덤한 숫자 2개 생성하기(1~10 범위)
			int num1 = ran.nextInt(10) + 1;
			int num2 = ran.nextInt(10) + 1;
			// 3. 문제 출력하기
			System.out.print(num1 + "+" + num2 + "=");
			// 4. 사용자로부터 정답 입력받기
			int answer = sc.nextInt();
			// 5. 입력받은 숫자와 실제 정답이 같은지 비교
			if (answer == num1 + num2) {
				// 정답을 맞췄을 때 !
				System.out.println("성공!");
			} else {
				// 정답이 틀렸을 때 !
				System.out.println("실패!");
				// 6. 계속하시겠습니까? 출력
				System.out.print("계속하시겠습니까? >> ");
				// 7. Y 또는 N을 입력 받기
				// 문자를 입력 받을 때는 String으로 입력 받자!
				String con = sc.next();
				if (con.equals("N") || con.equals("n")) {	
					// String은 기본형이 아닌 특이한 데이터 타입이다.
					// 그래서 비교하기 위해서는 .equals()를 사용해야 한다.
					
					// 8. N을 입력 받으면 프로그램 종료
					System.out.println("프로그램 종료 !");
					break;
				}
			}
		} while (true);



1.3. for문

횟수가 정해진 경우 자주 사용함.

1.3.1. for문의 영역 파악하기

  1. 초기화 영역
  2. 검사 조건 영역
    (false이면 반복문을 멈춤)
  3. 반복후 작업 영역 (후위 증감자)
  4. 실행구문 영역

  • for문 실행 순서 (위 이미지 참조)
    for(int i =0; i < 5; i++) 의 for문 순서분석
1 → 2 → 4 → 3 → 
2(true) → 4 → 3 →
2(true) → 4 → 3 → 
2(true) → 4 → 3 → 
2(true) → 4 → 3 → 
2(true) → for문 끝

1.3.2. for문 로직

// 1부터 10까지 출력하는 for문을 만들어 보자.
for (int i = 1; i <= 10; i++) {
	System.out.print(i+" ");
}

1.3.3. for문을 이용한 다양한 로직

	// 1. for문을 사용하여 96에서 73까지 출력하세요.
		for(int i = 96; i>=73; i--) {
			System.out.print(i+" ");
		}
		System.out.println();
		
	// 2.숫자들 중 홀수만 출력하세요.
		for(int i = 96; i>=73; i--) {
			if (i%2 == 1) {
				System.out.print(i +" ");
			}
		}
        
     // 3.for문을 사용하여 구구단 2단을 출력하세요.
		int num = 2;
		for (int i = 1; i <= 9; i++) {
			System.out.println(num + " * " + i + " = " + num * i);
		}
      
    
	// 4. 입력받은 정수의 약수를 구하세요. 
	// - 숫자를 입력 받는다. 
	// - 입력 받은 숫자를 임의의 숫자로 나누었을대 나머지가 0이라면 약수
		
		// 1.도구 가져오기
		Scanner sc = new Scanner(System.in);
		// 2. 입력 받는 출력문
		System.out.print("정수입력 : ");
		// 3. 값 입력 받기
		int num = sc.nextInt();

		// 4. 반복문으로 수 계산
		for (int i = 1; i <= num; i++) {
			// 5. 조건으로 출력할 수 계산
			if (num % i == 0) {
				// 6.조건이 맞을때 숫자를 출력 (i는 num의 약수!) 
				System.out.print(i + " ");
			}
		}
        
        
	// 5. (77*1) + (76*2) + (75*3) + ... + (1*77)을 계산하여 결과를 출력하세요.
        int num = 1;	// 1 ~ 77 까지 증가할 숫자
		int sum = 0;	// 곱셈결과를 누적시킬 공간
		
		for (int i = 77; i >= 1; i--) {	// i : 77 ~ 1 까지 감소할 숫자
			//sum = sum + i * num;
			sum += i * num;
			num++ ;	//num 값을 1 ~ 77까지 증가시킴
		}
		System.out.println(sum);

중첩 반복문 또는 이중 for문
실습예제 : 별찍기 여러가지

	// 1. 반드시 한 줄씩 처리해서 패턴을 찾아낼 것 !
	// *
	// **
	// ***
	// ****
	// *****
		for (int j = 1; j < 6; j++) {
			for (int i = 0; i < j; i++) {
				System.out.print("*");
			}
			System.out.println();
		}
        
        
	// 숙제 1) 처음이 5개에서 끝은 1개의 별로 해보기
	// *****
	// ****
	// ***
	// **
	// *
		for (int j = 5; j > 0; j--) {
			for (int i = 0; i < j; i++) {
				System.out.print("*");
			}
			System.out.println();
		}


	// 숙제 2) 공포의 별찍기? : 공백 후 별 위치찍기
	//     *
	//    **
	//   ***
	//  ****
	// *****
		for (int j = 5; j > 0; j--) {
			for (int i = 1; i < j; i++) {
				System.out.print(" ");
			}
			for (int i = 6; i > j; i--) {
				System.out.print("*");
			}
			System.out.println();
		}
        
        
    // 숙제 2.5) 공포의 별찍기? : 트리만들기
		System.out.println("숙제 2.5) 별로 트리만들기 !");
	//     *
	//    ***
	//   *****
	//  *******
	// *********
		for (int j = 5; j > 0; j--) {
			for (int i = 1; i < j; i++) {
				System.out.print(" ");
			}
			for (int k = 6; k > j; k--) {
				System.out.print("*");
				if (k != 6) {
					for (int i = 0; i < 1; i++) {
						System.out.print("*");
					}
				}
			}
			System.out.println();
		}

이중 for문은 실행순서를 명확히 알아야 한다.


그외. 단축키

ctrl + Shift + F = 정렬하기

profile
제가 한 번 해보겠습니다.

0개의 댓글