
게임 '포트리스'
어릴 적 많이 했던 게임 포트리스가 생각났다.
대포의 탄알이 나가는 구멍도 포문인데
'포문을 열다' 라는 말 그대로 for문을 여는 날이 왔다.
이제 포탄을 날려보자.
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");
}
}
}
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);
}
}
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);
}
}
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("잘못 입력 하셨습니다");
}
}
}
정말 좋은 글 감사합니다!