TIL - 05. for문 [230718]

송원철·2023년 7월 18일

게임 '포트리스'

어릴 적 많이 했던 게임 포트리스가 생각났다.
대포의 탄알이 나가는 구멍도 포문인데
'포문을 열다' 라는 말 그대로 for문을 여는 날이 왔다.
이제 포탄을 날려보자.

ConditionPractice

package edu.kh.control.practice;

import java.util.Scanner;

public class ConditionPractice {

	Scanner sc = new Scanner(System.in);
	
	public void practice1() {
		
		System.out.print("숫자를 한 개 입력하세요 : ");
		int num = sc.nextInt();
		
		if (num > 0 && num % 2 == 0) {
			System.out.print("짝수입니다.");
		} else if (num > 0 && num % 2 != 0) {
			System.out.print("홀수입니다.");
		} else {
			System.out.print("양수만 입력해주세요.");
		}
		
	}
	
	public void practice2() {
		
		System.out.print("국어점수 : ");
		int kor = sc.nextInt();
		System.out.print("수학점수 : ");
		int math = sc.nextInt();
		System.out.print("영어점수 : ");
		int eng = sc.nextInt();
		
		int sum = (kor + math + eng);
		
		if (kor > 40 && math > 40 && eng > 40 && sum / 3 > 60) {
			System.out.print("국어 : " + kor +
					"\n수학 : " + math +
					"\n영어 : " + eng +
					"\n합계 : " + sum + 
					"\n평균 : " + sum / 3 +
					"\n축하합니다, 합격입니다!");
		} else { 
			System.out.print("불합격입니다.");
		}
		
	}
	
	public void practice3() {
		
		System.out.print("1~12 사이의 정수 입력 : ");
		int month = sc.nextInt();
		
		String result;
		
		switch(month) {
		case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : result = "월은 31일까지 있습니다."; break;
		case 2 : result = "월은 28일까지 있습니다."; break;
		case 4 : case 6 : case 9 : case 11 : result = "월은 30일까지 있습니다."; break;
		default : result = "월은 잘못 입력된 달입니다.";
		}
		
		System.out.print(month + result);
	}
	
	public void practice4() {
		
		System.out.print("키(m)를 입력해 주세요. : ");
		double h = sc.nextDouble();
		
		System.out.print("몸무게(kg)를 입력해 주세요. : ");
		double kg = sc.nextDouble();
		
		double BMI = kg / (h * h);
		
		System.out.println("BMI 지수 : " + BMI);
		
		if (BMI < 18.5) {
			System.out.print("저체중");
		} else if (BMI >= 18.5 && BMI < 23) {
			System.out.print("정상체중");
		} else if (BMI >= 23 && BMI < 25) {
			System.out.print("과체중");
		} else if (BMI >= 25 && BMI <30) {
			System.out.print("비만");
		} else {
			System.out.print("고도 비만");
		}
		
	}
	
	public void practice5() {
		
		System.out.print("중간 고사 점수 : ");
		double mid = sc.nextDouble();
		
		System.out.print("기말 고사 점수 : ");
		double fin = sc.nextDouble();
		
		System.out.print("과제 점수 : ");
		double assign = sc.nextDouble();
		
		System.out.print("출석 횟수 : ");
		int atten = sc.nextInt();
		
		System.out.println("================= 결과 =================");
		
		double midp = mid * 0.2;
		double finp = fin * 0.3;
		double assignp = assign * 0.3;
		double attendp = atten;
		double sum = midp + finp + assignp + attendp;
		
		if (atten > 20) {
			System.out.print("출석 횟수는 20회를 초과할 수 없습니다.");
		} else if (atten < 15) {
			System.out.print("Fail [출석 횟수 부족 " + "(" + atten + "/20)]");
		} else if (sum < 70 && atten >= 15 && atten <= 20) {
			System.out.println("중간 고사 점수(20): " + midp +
					"\n기말 고사 점수(30): " + finp +
					"\n과제 점수       (30): " + assignp +
					"\n출석 점수       (20): " + attendp +
					"\n총점: " + sum +
					"\nFail [점수 미달]");
		} else if (sum >= 70 && atten >= 15 && atten <= 20) {
			System.out.println("중간 고사 점수(20): " + midp +
					"\n기말 고사 점수(30): " + finp +
					"\n과제 점수       (30): " + assignp +
					"\n출석 점수       (20): " + attendp +
					"\n총점: " + sum +
					"\nPASS");
		}
	}
	
}

ConditionExample

package edu.kh.control.condition;

import java.util.Scanner;

public class ConditionExample {

	public void ex1() {
		
		// if문
		// 조건식이 true 일때만 내부 코드 수행
		
		/*
		 * [작성법]
		 * if(조건식) {
		 * 		조건식이 true 일 때 수행할 코드
		 * }
		 * 
		 * 
		 */
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 : ");
		int input = sc.nextInt();
		
		// 입력된 정수가 양수인지 검사
		if(input > 0) {
			System.out.print("양수입니다.");	
		}
		
		if(input <= 0) {
			System.out.print("양수가 아니다.");
		}
		
	}
		
		public void ex2() {
			
			// if -else
			// 조건식 결과가 true면 if문,
			// false면 else 구문이 수행됨.
			
			/*
			 * if(조건식) { 
			 * 		조건식이 true일 때 수행될 코드
			 * } else {
			 * 		조건식이 false일 때 수행될 코드
			 * }
			 * 
			 * 
			 */
			
			Scanner sc = new Scanner(System.in);
			
			// 홀짝 검사
			System.out.print("정수 입력 : ");
			int input = sc.nextInt();
			
			if ( input % 2 != 0 ) {
				System.out.print("홀수 입니다.");
	
			} else { // 짝수 또는 0 입력 시 수행
			
				// 중첩 if문
				if(input == 0) {
					System.out.print("0입니다.");
				} else {
					System.out.print("짝수입니다.");
				}
				
			}
			
		}
		
		public void ex3() {
			
			// 양수, 음수, 0 판별
			
			// if - else if - else
			
			Scanner sc = new Scanner(System.in);
			
			System.out.print("정수 입력 : ");
			int input = sc.nextInt();
			
			if (input > 0) {
				System.out.print("양수입니다.");
			} else if (input < 0) { // input이 음수일 경우
				// 바로 위에 있는 if문이 만족되지 않은 경우 수행
				System.out.println("음수 입니다.");
			} else {
				System.out.println("0입니다.");
			}
				
		}
		
		public void ex4() {
			
			// 달(month)을 입력받아 해당 달에 맞는 계절 출력
			// 단, 겨울일 때 온도가 -15도 이하 "한파 경보", -12도 이하 "한파 주의보"
			// 여름일 때 온도가 35도 이상 "폭염 경보", 33도 이상 " 폭염 주의보"
			// 1~12 사이가 아닐 땐 "해당하는 계절이 없습니다." 출력
			
			Scanner sc = new Scanner(System.in);
			
			System.out.print("달 입력: ");
			int month = sc.nextInt();
			
			int temperature = 10;
			
			String season; 
			
			if (month == 1 || month == 2 || month == 12) {
				season = "겨울";
				
				if (temperature <= -15) {
					season += " 한파 경보";
				} else if (temperature <= -12) {
					season += " 한파 주의보";
				}
				
			} else if (month >= 3 && month <= 5) {
				season = "봄";
				
			} else if (month >= 6 && month <= 8) {
				season = "여름";
				
				if (temperature >= 35) {
					season += " 폭염 경보";
				} else if (temperature >= 33) {
					season += " 폭염 주의보";
				}
				
			} else if (month >= 9 && month <= 11) {
				season = "가을";
				
			} else {
				season = "해당하는 계절이 없습니다.";
			}
			
			System.out.println(season);
		
		}
        
}

SwitchExample

package edu.kh.control.condition;

import java.util.Scanner;

public class SwitchExample {
	
	/* switch문
	 * - 식 하나의 결과로 많은 경우의 수를 처리할 때 
	 * -> 식의 결과로 얻은 값과 같은 case 구문이 수행된다.
	 * 
	 * [작성법]
	 * switch(식) {
	 * 
	 * case 결과값1 : 수행코드1; break;
	 * case 결과값2 : 수행코드2; break;
	 * case 결과값3 : 수행코드3; break;
	 * ...
	 * default : case를 모두 만족하지 않을 경우 수행하는 코드;
	 * 
	 * }
	 * 
	 */
	
	Scanner sc = new Scanner(System.in);
	
	public void ex1() {
		// 키보드로 정수를 입력받아
		// 1 이면 "빨강색"
		// 2 이면 "주황색"
		// 3 이면 "노란색"
		// 4 이면 "초록색"
		// 1~4 사이 숫자가 아니면 "흰색" 출력
		
		System.out.print("정수 입력 : ");
		int input = sc.nextInt();
		
		String result; // 결과값 저장할 변수
		
		switch(input) {
			
		case 1 : result = "빨강색"; break;
		case 2 : result = "주황색"; break;
		case 3 : result = "노란색"; break;
		case 4 : result = "초록색"; break;
		default : result = "흰색";
		
		}
		
		System.out.println(result);

	}
	
	public void ex2() {
		
		System.out.print("달(월) 입력 : ");
		int month = sc.nextInt();
		
		String result; // 결과 저장 변수 선언
		
		switch (month) {
		case 3 : case 4 : case 5 : result = "봄"; break;
		case 6 : case 7 : case 8 : result = "여름"; break;
		case 9 : case 10 : case 11 : result = "가을"; break;
		case 12 : case 1 : case 2 : result = "겨울"; break;
		default : result = "잘못입력";
		}
		
		System.out.print(result);
	}
    
}

For문

package edu.kh.control.loop;

import java.util.Scanner;

public class ForExample {
	Scanner sc = new Scanner(System.in);
	/* for문
	 * - 끝이 정해져 있는(횟수가 지정되어 있는) 반복문
	 * 
	 * [작성법]
	 * 
	 * for(초기식; 조건식; 증감식) {
	 * 		반복 수행할 코드
	 * }
	 * 
	 * - 초기식 : for문을 제어하는 용도의 변수 선언
	 * 
	 * - 조건식 : for문의 반복 여부를 지정하는 식
	 * 			  보통 초기식에 사용된 변수를 이용하여 조건식을 작성함
	 * 
	 * - 증감식 : 초기식에 사용된 변수를
	 * 			  for문이 끝날 때 마다 증가 또는 감소시켜 
	 * 			  조건식의 결과를 변하게 하는 식
	 */
	
	public void ex1() {
		// for 문 기초 사용법 1
		// 1~10 출력하기
		// 1부터 10까지 1씩 증가하며 출력
		
		for (int i = 1; i <= 10; i++ ) {
			 //초기식  //조건식 //증감식
			
			 // 반복 수행할 코드
			System.out.println(i);
		}
		
	}
	
	
	public void ex2() {
		// 3에서 7까지 1씩 증가하며 출력
		// 3 4 5 6 7
		
		for (int i = 3; i <= 7 ; i++) {
			System.out.println(i);
		}
		
	}
	
	
	public void ex3() {
		// 2부터 15까지 1씩 증가하며 출력
		
		for (int i = 2; i <= 15; i++) {
			System.out.println(i);
		}
		
	}
	
	
	public void ex4() {
		// 1부터 입력받은 수까지 1씩 증가하며 출력
		
		System.out.print("입력 번호 : ");
		int x = sc.nextInt();
		
		for (int i = 1; i <= x; i++) {
			System.out.println(i);
		}
		
	}
	
	
	public void ex5() {
		// 1부터 입력받은 수까지 2씩 증가하며 출력
		System.out.print("입력 번호 : ");
		int x = sc.nextInt();
		
		for (int i = 1; i <= x; i += 2 ) {
			System.out.println(i);
		}
	}
	
	
	public void ex6() {
		// 1.0 부터 입력받은 실수까지 0.5씩 증가하며 출력
		
		System.out.print("입력 번호 : ");
		double x = sc.nextDouble();
		
		for (double i = 1.0; i <= x; i += 0.5) {
			System.out.println(i);
		}
		
	}
	
	
	public void ex7() {
		// 영어 알파벳 A 부터 Z 까지 한줄로 출력
		// ABC...Z
		
		// * char 자료형은 문자형이지만 실제로 정수(문자표 번호)를 저장한다.
		
		for(int i = 'A'; i <= 'Z'; i++) {
			System.out.print((char)i); // 강제형변환
		}
		System.out.println("\n----------------------------");
		
		for(char i = 'A'; i <= 'Z'; i++) {
			System.out.print(i);
		}
		
	}
	
	
	public void ex8() {
		for(int i = 10; i >= 1; i--) {
			System.out.println(i);
		}
		
		
	}
	
	
	public void ex9() {
		
		// 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);
	}
	
	
	public void ex10() {
		// for문 응용 2 : 정수 5개를 입력 받아서 합계 구하기
		
		// ex)
		// 입력 1 : 10
		// 입력 2 : 20
		// 입력 3 : 30
		// 입력 4 : 40
		// 입력 5 : 50
		// 합계 : 150
		
		int sum = 0;
		
		for (int i = 1; i <= 5; i++) {
			System.out.printf("입력 " + i + " : ");
			int input = sc.nextInt();
			sum += input; // sum에 입력받은 input값 누적
		}
		
		System.out.print("합계 : " + sum);
		
	}
	
	
	public void ex11() {
		// 정수를 몇 번 입력 받을지 먼저 입력 받고
		// 입력된 정수의 합계를 출력
		
		// ex)
		// 입력 받을 정수의 개수 : 3
		// 입력 1 : 10
		// 입력 2 : 20
		// 입력 3 : 30
		// 합계 : 60
		
		// ex)
		// 입력 받을 정수의 개수 : 2
		// 입력 1 : 10
		// 입력 2 : 20
		// 합계 : 30
		
		System.out.print("입력 받을 정수의 개수 : ");
		int num = sc.nextInt();
		
		int sum = 0;
		
		for (int i = 1; i <= num; i++) {
			System.out.print("입력 " + i + " : ");
			int input = sc.nextInt();
			
			sum += input;
		}
		
		System.out.print("합계 : " + sum);

	}
	
	
	public void ex12() {
		// 1부터 20까지 1씩 증가하면서 출력
		// 단, 5의 배수 () 를 붙여서 출력
		// ex) 1 2 3 4 (5) 6 7 8 9 (10) ... (20)
		
		for(int i = 1; i <= 20; i++) {
			if (i % 5 == 0) {	
			   	System.out.print("(" + i + ") ");
			} 	else {
				System.out.print(i + " ");
			}
		}
	}
	
	
	public void ex13() {
		// 1부터 20까지 1씩 증가하면서 출력
		// 단, 입력 받은 수의 배수는 () 표시
		
		// ex)
		// 괄호를 표시할 배수 : 3
		// 1 3 (3) 4 5 (6)..
		System.out.print("괄호를 표시할 배수 : ");
		int num = sc.nextInt();
		
		for (int i = 1; i <= 20; i++) {
			if (i % num ==0) {
				System.out.print("(" + i + ") ");
			}	else {
				System.out.print(i + " ");
			}
		}
		
	}
	
	
	public void ex14() {
		
		// [구구단 출력]
		// 2 ~ 9 사이 수를 하나 입력받아
		// 해당 단을 출력
		// 단, 입력받은 수가 2 ~ 9 사이 숫자가 아니면 "잘못 입력 하셨습니다" 출력
		
		System.out.print("단 입력 : ");
		int dan = sc.nextInt();
		
		if (dan >= 2 && dan <= 9) { // dan이 2~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 ex15() {
		// [19단 출력기]
		// 2 ~ 19단 사이 단을 입력 받아서 x 1 ~ x 19까지 출력
		// 단, 2 ~ 19 사이 단이 입력되지 않으면 "잘못 입력 하셨습니다" 출력 
		
		System.out.print("단 입력 : ");
		int dan = sc.nextInt();
		
		if (dan >=2 && dan <= 19) {
		for (int i = 1; i <= 19; i++) {
			System.out.printf("%d X %d = %d\n", dan, i, dan * i);
			} 
		} else {
			System.out.print("잘못 입력 하셨습니다");
		}
	}
	
}
profile
초보자

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

정말 좋은 글 감사합니다!

답글 달기
comment-user-thumbnail
2023년 7월 18일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기