JAVA_05

김민영·2024년 1월 26일

JAVA

목록 보기
6/10
post-thumbnail

반복문

  • 반복해서 실행해야 할 때 사용하는 명령문

  • 반복되는 일을 처리하기 위해 사용하는 명령문

  • 반복문의 종류
    while 반복문, do ~ while 반복문, for 반복문


while 반복문

  • 조건식을 비교하여 참인 경우 계속해서 반복 실행문을 실행하고, 조건식이 거짓인 경우에 반복문을 빠져나가는 명령문
  • while 반복문은 반복문의 횟수를 알 수 없는 경우에 많이 사용함
  • 반복문에는 반드시 초기식, 조건식, 증감식이 존재해야 함

형식)

		while(조건식){
			반복 실행 문장;
		}

- 하나하나 출력해야 되는 출력문들을

public class WhileExam_16 {

	public static void main(String[] args) {
		
		System.out.println("su >>> " + 1);
		System.out.println("su >>> " + 2);
		System.out.println("su >>> " + 3);
		System.out.println("su >>> " + 4);
		System.out.println("su >>> " + 5);
		System.out.println("su >>> " + 6);
		System.out.println("su >>> " + 7);
		System.out.println("su >>> " + 8);
		System.out.println("su >>> " + 9);
		System.out.println("su >>> " + 10);
		
		System.out.println();
    }
		
}

- while 반복문을 이용하여 쉽게 출력 가능

public class WhileExam_16 {

	public static void main(String[] args) {
		
		// while 반복문을 이용하여 1 ~ 10 까지 출력
		
		int num = 1;								// 반복문에서 초기식
		
		while(num <= 10) { 							// 반복문에서 조건식
			System.out.println("num >>> " + num);
			
			num++; 									// 반복문에서 증감식 - 단항연산자
			
		}	 										// while 반복문 end

	}

}

- while 반복문을 이용하여 1 ~ 10 까지의 합을 구해 보자


public class WhileExam_17 {

	public static void main(String[] args) {
		
		// 1. 변수 선언 - 초기식 변수, 합을 저장할 변수
		
		int su = 1; 		// 반복문에서의 초기식
		int sum = 0; 		// 1 ~ 10까지 합을 저장할 변수
		
		while(su <= 10) { 	// 반복문에서의 조건식 
			sum += su;		// sum = sum + su
			su++;			// 반복문에서의 증감식
		}
		
		System.out.println("1 ~ 10 까지의 합 >>> " + sum);
		
		

	}

}

<문제풀기>

[문제1] 1 ~ 100 까지의 짝수의 합과 홀수의 합을 구하여 화면에 보여주세요

public class WhileExam_18 {

	public static void main(String[] args) {
    
    	// 1. 사용될 변수 선언
		int x = 1;			// 반복문에서의초기식
		int sum = 0;		// 짝수의 합
		int sum2 = 0;		// 홀수의 합
		
		
		while(x <= 100) { 	// 반복문에서의 조건식
			if(x %2 == 0) {
            // 참인 경우 ==> 짝수인 경우
				sum = sum + x;
			} else {
            // 거짓인 경우 ==> 홀수인 경우
				sum2 += x;
			}
			x++; 			// 반복문에서의 증감식
		}  					// while 반복문 end
		
		System.out.println("짝수 합 >>> " + sum );
		System.out.println("홀수 합 >>> " + sum2 );

	}

}

[문제2] ABCDEFGHIJKLMN...XYZ까지, ZYXWV...EDCBA까지 문자 출력

public class WhileExam_19 {

	public static void main(String[] args) {
		
		// ABCDEFGHIJKLMN...XYZ까지 문자를 출력해 보자
		
		char alpha = 'A'; 					// 반복문에서 초기식
		
		while (alpha <= 'Z') {				// 반복문에서 조건식
			
			System.out.print(alpha);
			
			alpha++;						// 반복문에서 증감식
			
		}
		
		System.out.println();
		
		//ZYXWV...EDCBA까지 문자를 출력해 보자
		
		char alpha2 = 'Z'; 					// 반복문에서 초기식
		
		while (alpha2 >= 'A') {				// 반복문에서 조건식
			
			System.out.print(alpha2);
			
			alpha2--;						// 반복문에서 증감식
			
		}

	}

}

[문제3] 1 ~ 100 사이의 정수 중에서 키보드로 5개의 정수를 입력을 받아서 5개의 정수 중에서 최대값을 화면에 보여주세요

  • (예 : 43, 17, 64, 98, 11)
import java.util.Scanner;

public class WhileExam_20 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int max = 0; // 최대값이 저장될 변수
		
		int temp = 0, su = 1;
		
		while(su <= 5) { // 반복조건문의 조건식
			
			System.out.print(su + "번째 정수 입력 : ");
			
			temp = sc.nextInt();
			
			if(temp > max) { // 조건문 조건식

				max = temp;
				
			}
			
			su++;
		}
		
		System.out.println("최대값 >>> " + max);
		
		sc.close();

	}

}

do ~ while 반복문

먼저 반복 실행문을 실행을 하고 난 후 조건식을 비교함

형식 )

do {
	 반복 실행 문장;
   } while(조건식);

- while문과 do ~ while문 차이


public class DoWhileExam_22 {

	public static void main(String[] args) {
		
		// 1 ~ 10까지 화면에 출력 - while 반복문
		
		int su = 1;
		
		while (su<=10) { // 조건식이 거짓이면 출력 X == 조건 비교 -> 출력
			System.out.println("su >>> " + su);
			su++;
		}
		
		System.out.println();
		
		// 1 ~ 10까지 화면에 출력 - do ~ while 반복문
		
		int num = 1;
		
		do {	// 일단 최소 한 번은 출력이 된 상태 == 출력 -> 조건 비교
			System.out.println("num >>> " + num);
			
			num++;
			
		} while(num <= 10);  // ; 필수

	}

}

for 반복문

  • 변수의 값을 이용하여 반복 실행하는 반복문

  • 일정 횟수에 대한 반복을 구현할 때 효율적으로 사용되는 반복문
    즉, 반복문의 횟수를 알고 있는 경우에 자주 사용

형식 )

for (초기식; 조건식; 증감식){
		반복 실행 문장;
}

[for 반복문 실행 순서]

  1. 초기식 : 처음에 한 번만 실행됨 (변수 선언 및 초기화)
  2. 조건식 : 조건이 참이면 반복 실행, 조건이 거짓이면 for 반복문 탈출
  3. 실행문 : 조건이 참일 때 반복 대상인 반복 실행문이 실행됨
  4. 증감식 : 변수를 대상으로 증가(++) 또는 감소(--)
  • while문과 for문
public class ForExam_23 {

	public static void main(String[] args) {
		
		// while 반복문을 이용하여 1 ~ 10까지 출력
		int su = 1;
		
		while (su<=10) { 
			System.out.println("su >>> " + su);
			su++;
		}
		
		System.out.println();
		
		// for 반복문을 이용하여 1 ~ 10까지 출력
		for(int num = 1; num <= 10; num++) {
			System.out.println("num >>> " + num);
		}
		

	}

}

<문제풀기>

[문제1] for 반복문을 이용하여 1 ~ 100까지의 홀수의 합과 짝수의 합을 구하여 출력

public class ForExam_24 {

	public static void main(String[] args) {
		
		int sum = 0, sum2 = 0;

		for(int i = 1; i <= 100; i++) {
			
			if (i %2 != 0) {
				sum += i;
			} else { 
 				sum2 += i;
			}
		}
		
		System.out.println("홀수의 합 >>> " + sum);
		System.out.println("짝수의 합 >>> " + sum2);

	}

}

[문제2] for 반복문을 이용하여 키보드로 입력받은 수까지의 홀수의 합과 짝수의 합을 구하여 화면에 보여주세요.

import java.util.Scanner;

public class ForExam_25 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("최대 정수 입력 : ");
		int j = sc.nextInt();
		
		int sum = 0, sum2 = 0;
		
		for (int i = 1; i <= j; i++) {
			if (i %2 != 0) {
				sum += i;
			} else {
 				sum2 += i;
			}
		}
		System.out.println("홀수의 합 >>> " + sum);
		System.out.println("짝수의 합 >>> " + sum2);
		
		sc.close();

	}

}

[문제3] 신장별 표준 체중 대응표를 만들어 보자

  • 표시할 신장 범위 (시작값 / 종료값 / 증가값)는
  • 정수로 할 예정이며, 키보드로 입력을 받을 예정
  • 표준 체중 구하는 공식 : (신장 - 100) * 0.9
import java.util.Scanner;

public class ForExam_26 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("몇 cm 부터 표시를 할까요? : ");
		int start = sc.nextInt();
		System.out.print("몇 cm 까지 표시를 할까요? : ");
		int end = sc.nextInt();
		System.out.print("몇 cm 단위로 표시를 할까요? : ");
		int step = sc.nextInt();
		
		System.out.println();
		
		for (int i = start; i <= end; i += step) {
			
			System.out.printf("%dcm\t%.1fkg\n",i,((i - 100)*0.9));
			
		}

		sc.close();
        
	}

}

다중 for 반복문

  • 반복문 안에 또 다른 반복문을 포함하는 형태를 말함
  • 반복문이 중첩이 되어 사용되는 경우를 말함
  • 외부 반복문과 내부 반복문 간의 변수의 값 변화에 유의할 것 - 중요함!

형식 )

for(초기식1; 조건식1; 증감식1){
		반복 실행 문장;
		for(초기식2; 조건식2; 증감식2){
				반복 실행 문장;
		}
}
public class ForExam_27 {

	public static void main(String[] args) {
		
		for(int i = 1; i <= 3; i++) {
			for(int j = 1; j <= 4; j++) { // 먼저 증가 반복
				System.out.println("[" + i + "," + j + "]");
			}
			
			System.out.println();
		}
	}

}

<문제풀기>

[문제1] 다중 for문을 이용하여 구구단을 만들어 보자

public class ForExam_28 {

	public static void main(String[] args) {
		for(int dan = 2; dan <= 9; dan++) {		// 구구단에서의 단
			
			System.out.println("***" + dan + "단 ***");
			
			for (int su = 1; su <= 9; su++) {	// 구구단에서의 수
				System.out.println(dan + " * " + su + " = " + (dan * su));
			} // 안쪽 for문의 end
			
			System.out.println();
		} // 바깥쪽 for문의 end
		
		System.out.println();
		System.out.println();

		for(int su1 = 1; su1 <= 9; su1++) {		// 구구단에서의 수
			
			for (int dan1 = 2; dan1 <= 9; dan1++) {	// 구구단에서의 단
				System.out.print(dan1 + " * " + su1 + " = " + ( dan1 * su1 ) +"\t");
			} // 안쪽 for문의 end
			
			System.out.println();
		} // 바깥쪽 for문의 end

	}

}

[문제2] 아래와 같이 화면에 출력을 해 보자

public class ForExam_29 {

	public static void main(String[] args) {
		
		// 1번 별찍기
		for(int i = 1; i <= 4; i++) { 	 // 별찍기에서의 행
			
			for(int j = 1; j < 8; j++) { // 별찍기에서의 열
				
				System.out.print("*");
				
			}
			
			System.out.println();
		}
		
		System.out.println();
		
		// 2번 별찍기
				for(int i = 1; i <= 5; i++) { 	 // 별찍기에서의 행
					
					for(int j = 1; j <= i; j++) { // 별찍기에서의 열
						
						System.out.print("*");
						
					}
					
					System.out.println();
				}
		
		System.out.println();
				
		// 3번 별찍기
				for(int i = 5 ; i >= 1; i--) { 	 // 별찍기에서의 행
							
					for(int j = 1; j <= i; j++) { // 별찍기에서의 열
								
						System.out.print("*");
								
					}
							
					System.out.println();
				}

	}

}

기타(보조제어문)

break 명령어

  • 현재의 제어문을 빠져나가는 명령어
  • 보통은 switch ~ case문과 반복문에서 사용됨
  • 반복문에서는 if문 블럭을 제외한 첫번째 블럭에서 빠져나가는 명령어
public class BreakExam_30 {

	public static void main(String[] args) {
		for(int i = 1; i <= 100; i++) {
			
			if(i>50) { // 51이 되면
				break;
			}
			
			System.out.println("i >>> " + i);
		}
		
		System.out.println();
		
		// 1 ~ 100까지의 합을 구해 보자
		int su = 1, sum = 0;
		
		while(true) { 		// 무한반복
			
			if(su > 100) {	//101
				break;
			}
			
			sum += su;
			su++;
			
		}
		System.out.println("sum >>> " + sum);
		
	}

}

continue 명령어

  • 반복문에서만 사용되는 명령어
  • 반복문을 탈출하는 것이 아니라, 다음 증감식으로 가는 명령어
public class ContinueExam_31 {

	public static void main(String[] args) {
		for(int i = 1; i <= 10; i++) {
			
			if(i %2 == 1) {
				continue;
			}
			System.out.println("i >>> " + i);
		}
		
		//  1 ~ 100 까지의 합을 구해 보자
		int sum = 0;
		
		for (int i = 1; i <= 100; i++) {
			if(i %2 == 1) {
				continue;
			}
			sum += i;
		}
		System.out.println("sum >>> " + sum);

	}

}

<문제풀기>

[문제1] 지방(fat), 탄수화물(carbohydrate), 단백질(protein) 칼로리의 합계를 계산하는 프로그램

  • 지방, 탄수화물, 단백질의 그램을 키보드 입력(Scanner 사용)
  • 총 칼로리 구하기
  • 지방 1그램 : 9칼로리
  • 단백질과 탄수화물 1그램 : 4칼로리
  • 총 칼로리 = 지방X9 + 단백질X4 + 탄수화물X4
import java.util.Scanner;

public class Exam_02_01 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner (System.in);
		
		System.out.print("지방의 그램을 입력하세요 : ");
		int a = sc.nextInt();
		
		System.out.print("탄수화물의 그램을 입력하세요 : ");
		int b = sc.nextInt();
		
		System.out.print("단백질의 그램을 입력하세요 ");
		int c= sc.nextInt();
		
		System.out.println();
		
		// 총 칼로리 = 지방*9 + 단백질*4 + 탄수화물*4
		int t = a*9 + b*4 + c*4;
		System.out.printf("총 칼로리 : %,d kcal\n ",t); 
		//,d를 사용하면 1000단위에서 반점
		
		sc.close();

	}

}

[문제2] 1부터 사용자가 입력한 수까지의 합 구하기 (예 : 100을 입력하면 1에서 100까지의 홀수 합과 짝수 합계 출력)

import java.util.Scanner;

public class Exam_02_01 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner (System.in);
		
		System.out.print("지방의 그램을 입력하세요 : ");
		int a = sc.nextInt();
		
		System.out.print("탄수화물의 그램을 입력하세요 : ");
		int b = sc.nextInt();
		
		System.out.print("단백질의 그램을 입력하세요 ");
		int c= sc.nextInt();
		
		System.out.println();
		
		// 총 칼로리 = 지방*9 + 단백질*4 + 탄수화물*4
		int t = a*9 + b*4 + c*4;
		System.out.printf("총 칼로리 : %,d kcal\n ",t); 
		//,d를 사용하면 1000단위에서 반점
		
		sc.close();

	}

}

[문제3] 다중 for문을 적용하여 다음과 같은 출력결과가 나타나도록 하시오

public class Exam_02_03_01 {

	public static void main(String[] args) {
		
		// 1. 올라가는 별 찍기
		for (int i = 1; i<=6; i++) { 		// 바깥쪽 for 문 ==> 행의 수
			
			for ( int j = 1; j <= i; j++) { // 안쪽 for 문 ==> 열의 수
				
				System.out.print("*");
				
			}
			
			System.out.println();
		}
		
		// 2. 내려가는 별 찍기
		for (int i = 5; i>=1; i--) {		// 바깥쪽 for 문 ==> 행의 수
			
			for ( int j = 1; j <= i; j++) { // 안쪽 for 문 ==> 열의 수
				
				System.out.print("*");
				
			}
			
			System.out.println();
		}
		

	}

}
import java.util.Scanner;

public class Exam_02_03_02 {

	public static void main(String[] args) {
		// 다중 for 문 한번으로 출력
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("별의 최대 갯수를 입력하세요 : ");
		
		int starCount = sc.nextInt();
		
		int line; 		// 별을 찍을 전체 라인 수
		
		// 전체 라인 수 ==> (입력받은 최대 별의 수 * 2) -1
		for(int i = 1; i <= (starCount*2-1); i++) {
			
			line = (i <= starCount) ? i : (starCount*2 - i); 
			// 참이면 i값이 line에 들어감
			// 거짓이면 (starCount*2 - i)로 계산한 값이 i
			
			for(int j = 1; j <= line; j++) {
				
				System.out.println("*");
				
			}
			
			System.out.println();
		}

		sc.close();

	}

}

[문제4] 다중 for문을 적용하여 다음과 같은 출력결과가 나타나도록 하시오.

public class Exam_02_04 {

	public static void main(String[] args) {
		
		for (char c = 'Z'; c >= 'A'; c--) {
			
			for(char ch = 'A'; ch <= c; ch++) {
				
				System.out.print(ch);
				
			}
			
			System.out.println();
		}
		
		System.out.println();
		
		// 유니코드
		
		for(int i = 90; i >= 65; i--) {
			
			for(int j = 65; j <= i; j++) {
				
				System.out.print((char)j);
				
			}
			
			System.out.println();
		}

	}

}

[문제5] 1 – 2 + 3 – 4 + 5 – 6 + 7 – 8 + 9 – 10 ……… - 100을 실행한 결과값을 화면에 출력해 보세요

public class Exam_02_05 {

	public static void main(String[] args) {
		
		int sum = 0;
		
		for (int i = 1; i <= 100; i++) {
			
			if(i %2 == 0) {
				
				sum = sum + (-i); // sum = sum - i;
				
			} else {
				
				sum += i;
				
			}
			
		}
		
		System.out.println("hap ==> " + sum);

	}

}

[문제6] coffee 메뉴를 키보드로 입력을 받고 주문수량과
입금액을 입력하면 아래 화면과 같이 출력되게 하세요.

총금액에는 부가세가 포함된 금액이 나와야 함

import java.util.Scanner;

public class Exam_02_06 {

	public static void main(String[] args) {
		
		System.out.println("*** coffee 메뉴 ***");
		System.out.println("1. 아메리카노 - 3,000원");
		System.out.println("2. 카페라떼 - 4,000원");
		System.out.println("3. 마키아또 - 4,500원");
		System.out.println("4. 바닐라라떼 - 4,500원");
		
		Scanner sc = new Scanner(System.in);
		System.out.print("위 메뉴 중 하나를 선택하세요 : ");
		int num = sc.nextInt();
		System.out.print("주문수량 >> ");
		int su = sc.nextInt();
		System.out.print("입금액 >> ");
		int pay = sc.nextInt();
		
        //커피 종류가 저장될 문자열 변수
		String name = null; // String name = ""; 
        
		int price = 0; // 커피금액
		
		switch(num) {
		case 1 : 
			name = "아메리카노";
			price = 3000;
			break;
		case 2 : 
			name = "카페라떼";
			price = 4000;
			break;
		case 3 : 
			name = "마키아또";
			price = 4500;
			break;
		case 4 : 
			name = "바닐라라떼";
			price = 4500;
			break;
			
		}
		
		// 공급가액 계산 	단가 * 수량
		int sum = su * price;
		// 부가세액 계산	공급가액 * 0.1
		int vat = (int) (sum * 0.1);
		// 총급액 계산		공급가액 + 부가세액
		int total = sum + vat;
		// 거스름돈 계산	입금액 - 총금액
 		int charge = pay - total;
		
		// 결과 출력
		System.out.println("주문한 메뉴 : "+ name);
		System.out.printf("커피 단가 : %,d원 \n", price);
		System.out.println("주문 수량 : " + su);
		System.out.printf("입금액 : %,d원 \n", pay);
		System.out.printf("총금액 : %,d원 \n",total);
		System.out.printf("거스름 돈 : %,d원 \n", charge);

		sc.close();

	}

}

profile
나다

0개의 댓글