GiantStepDEV
article thumbnail

๊ธฐ๋Šฅ ์„ค๊ณ„

(1) ์ „์› on/off
(2) ์˜จ๋„ ์„ค์ • (1๋„ ๋‹จ์œ„)
(3) ํ˜„์žฌ ์˜จ๋„ ํ‘œ์‹œ
(4) ์ฟจ๋Ÿฌ on/off
(5) ํžˆํ„ฐ on/off
(6) ๋ฐ”๋žŒ ์„ธ๊ธฐ ์„ค์ • (1๋‹จ๊ณ„ / 2๋‹จ๊ณ„ / 3๋‹จ๊ณ„)

์„ค์ • ์กฐ๊ฑด ๋ฐ ๋™์ž‘

(1) ์„ค์ • ์˜จ๋„์— ๋”ฐ๋ผ ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ + ๋ฐ”๋žŒ์„ธ๊ธฐ์— ๋”ฐ๋ผ (60์ดˆ/30์ดˆ/20์ดˆ) ์ฃผ๊ธฐ๋กœ ์˜จ๋„ ๋ณ€๊ฒฝ
(2) ์—์–ด์ปจ์˜ ๋™์ž‘์€ Scanner๋กœ ํŠน์ • ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ ๋™์ž‘ ์‹œํ‚ด
(3) ํ˜„์žฌ ์˜จ๋„ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด ์บ˜๋ฆฐ๋” API๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ๋‹ฌ์˜ ์ ์ ˆํ•œ ์˜จ๋„๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ตฌํ˜„
(4) ํ˜„์žฌ ์˜จ๋„์™€ ์„ค์ • ์˜จ๋„๊ฐ€ ๊ฐ™์•„์ง€๋ฉด ์ž๋™ ์ข…๋ฃŒ

์ˆœ์„œ

1. ๊ธฐ๋Šฅ ์„ค๊ณ„์— ํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ํ•„๋“œ ์„ ์–ธ
2. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ƒ์„ฑ - ์ดˆ๊ธฐ๊ฐ’ ์„ธํŒ…
3. ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์„ค๊ณ„(๋ฉ”์†Œ๋“œ ์ƒ์„ฑ)

Aircon

package ์—์–ด์ปจ๋งŒ๋“ค๊ธฐ0118;
import java.util.Calendar;
import java.util.Scanner;

public class AirCon {
    // 1. ๊ธฐ๋Šฅ ์„ค๊ณ„์— ํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ํ•„๋“œ ์„ ์–ธ
    private boolean isPower; // ์ „์›
    private int setTemp; // ์˜จ๋„ ์„ค์ •
    private int currTemp; // ํ˜„์žฌ ์˜จ๋„
    private boolean isCooler; // ๋ƒ‰๋ฐฉ๊ธฐ ์ „์›
    private boolean isHeater; // ๋‚œ๋ฐฉ๊ธฐ ์ „์›
    private int windStep; // 1๋‹จ, 2๋‹จ, 3๋‹จ
    // 2. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ƒ์„ฑ - ์ดˆ๊ธฐ๊ฐ’ ์„ธํŒ…
    public AirCon() {
        final int[] monthTemp = {-5, 3, 8, 14, 22, 27, 31, 30, 22, 18, 7, 2};
        Calendar now = Calendar.getInstance();
        int month = now.get(Calendar.MONTH); // ํ˜„์žฌ ๋‹ฌ์„ ๊ฐ€์ ธ์˜ด
        currTemp = monthTemp[month];
        isPower = false;
        setTemp = 20;
        isCooler = false;
        isHeater = false;
        windStep = 1;
    }
    // 3. ๋ฉ”์†Œ๋“œ ์ƒ์„ฑ
    // ์—์–ด์ปจ์˜ ์˜จ๋„๊ฐ€ ๋ณ€๊ฒฝ ๋  ๋•Œ ํ™”๋ฉด ์ถœ๋ ฅ
    public void airConInfo() {
        String onOffStr = (isPower) ? "ON" : "OFF";
        String coolerStr = (isCooler) ? "ON" : "OFF";
        String heaterStr = (isHeater) ? "ON" : "OFF";
        final String[] windStr = {"", "1๋‹จ๊ฒŒ", "2๋‹จ๊ณ„", "3๋‹จ๊ณ„"};
        System.out.println("====== ์—์–ด์ปจ ์ •๋ณด ======");
        System.out.println("์ „์› : " + onOffStr);
        System.out.println("ํ˜„์žฌ ์˜จ๋„ : " + currTemp);
        System.out.println("์„ค์ • ์˜จ๋„ : " + setTemp);
        System.out.println("ํžˆํ„ฐ : " + heaterStr);
        System.out.println("์ฟจ๋Ÿฌ : " + coolerStr);
        System.out.println("๋ฐ”๋žŒ ์„ธ๊ธฐ : " + windStr[windStep]);
    }
    // ์—์–ด์ปจ์— ๋Œ€ํ•ด ์˜จ๋„์™€ ๋ฐ”๋žŒ์„ธ๊ธฐ ์„ค์ • ๋ฐ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํžˆํ„ฐ ๋˜๋Š” ์ฟจ๋Ÿฌ ๊ฐ€๋™
    public void setAirConState() {
        Scanner sc = new Scanner(System.in);
        System.out.println("ํ˜„์žฌ ์˜จ๋„๋Š” " + currTemp + " ์ž…๋‹ˆ๋‹ค.");
        System.out.print("์˜จ๋„๋ฅผ ์„ค์ • ํ•˜์„ธ์š”. : ");
        setTemp = sc.nextInt();
        System.out.println("์„ค์ • ์˜จ๋„๋Š” " + setTemp + " ์ž…๋‹ˆ๋‹ค.");
        System.out.print("๋ฐ”๋žŒ ์„ธ๊ธฐ๋ฅผ ์„ค์ • ํ•˜์„ธ์š”.[1๋‹จ]/[2๋‹จ]/[3๋‹จ] : ");
        windStep = sc.nextInt();
        if (currTemp > setTemp) { // ํ˜„์žฌ ๋”์šด ์ƒํƒœ
            System.out.println("์ฟจ๋Ÿฌ๊ฐ€ ๋™์ž‘ ํ•ฉ๋‹ˆ๋‹ค.");
            isCooler = true;
            isHeater = false;
        } else if (currTemp < setTemp) { // ํ˜„์žฌ ์ถ”์šด ์ƒํƒœ
            System.out.println("ํžˆํ„ฐ๊ฐ€ ๋™์ž‘ ํ•ฉ๋‹ˆ๋‹ค.");
            isHeater = true;
            isCooler = false;
        } else {
            isCooler = false;
            isHeater = false;
        }
    }
    public void setPower(boolean power) {
        isPower = power;
    }
    public int getWindStep() {
        return windStep;
    }
    public boolean isHeater() {
        return isHeater;
    }
    public boolean isCooler() {
        return isCooler;
    }
    public void setCurrTemp(int n) {
        currTemp += n;
    }
    public int getCurrTemp() {
        return currTemp;
    }
    public int getSetTemp() {
        return setTemp;
    }
}
* Calendar() ์ฃผ์˜ํ•  ์ !!
 > Calendar.MONTH ์—์„œ ์–ป์–ด์˜ค๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋Š” 1~12๊ฐ€ ์•„๋‹ˆ๋ผ 0~11์ด๋‹ค.
์ฆ‰, ์–ป์–ด์˜ค๋Š” ๊ฐ’์ด 0์ด๋ฉด 1์›”, 11์ด๋ฉด 12์›”์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— monthTemp[] 0๋ฒˆ์งธ ์ž๋ฆฌ๋ฅผ " "์œผ๋กœ ๋‘์ง€ ์•Š์•˜๋‹ค.
* ์ •์˜ํ•œ ๊ฐ’์„ ์ฝ๋Š” ์šฉ๋„๋กœ๋งŒ ์“ธ ๋•Œ์—๋Š” final๋กœ ์ƒ์„ฑ
์ฝ๋Š” ์šฉ๋„๋กœ ์“ฐ๋Š”๊ฑฐ๋ผ๋ฉด ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ์•ˆ๋˜๊ฑฐ๋‚˜ ์•ˆ๋ฐ”๋€”๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์—..

Main

package ์—์–ด์ปจ๋งŒ๋“ค๊ธฐ0118;
import java.util.Scanner;
import static java.lang.Thread.sleep;

public class AirConMain {
    public static void main(String[] args) throws InterruptedException {
        AirCon lgAirCon = new AirCon();
        Scanner sc = new Scanner(System.in); // ์—์–ด์ปจ์„ ์ผœ๊ธฐ ์œ„ํ•ด ์ฝ˜์†” ์ž…๋ ฅ...
        int elapsedTime = 0; // ๊ฒฝ๊ณผ ์‹œ๊ฐ„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
        boolean isSetTemp = false; // ์˜จ๋„๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผํ•  ์กฐ๊ฑด ํ™•์ธ
        System.out.print("์—์–ด์ปจ์„ ์ผœ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?[yes/no] : ");
        String isOn = sc.next(); // ์—์–ด์ปจ์„ ์ผœ๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ ๋ฐ›์Œ
        if(isOn.equalsIgnoreCase("yes")) {
            lgAirCon.setPower(true);
            lgAirCon.setAirConState(); // ์˜จ๋„์™€ ๋ฐ”๋žŒ์„ธ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์„ค์ •์— ๋”ฐ๋ผ ์ฟจ๋Ÿฌ/ํžˆํ„ฐ ๊ฐ’ ๋ณ€๊ฒฝ
            while(true) {
                sleep(1000); // 1์ดˆ(1000๋ถ„์˜ 1์ดˆ * 1000)
                elapsedTime++;
                switch(lgAirCon.getWindStep()) {
                    case 1 :
                        if(elapsedTime >= 60) isSetTemp = true; break;
                    case 2 :
                        if(elapsedTime >= 30) isSetTemp = true; break;
                    case 3 :
                        if(elapsedTime >= 30) isSetTemp = true; break;
                    default:
                }
                if(isSetTemp) {
                    if(lgAirCon.isHeater()) lgAirCon.setCurrTemp(1);
                    if(lgAirCon.isCooler()) lgAirCon.setCurrTemp(-1);
                    lgAirCon.airConInfo();
                    isSetTemp = false;
                    elapsedTime = 0;
                }
                if(lgAirCon.getCurrTemp() == lgAirCon.getSetTemp()) {
                    System.out.println("์—์–ด์ปจ์„ ์ข…๋ฃŒ ํ•ฉ๋‹ˆ๋‹ค.");
                    break;
                }
            }
        }
        if(isOn.equalsIgnoreCase("NO")) System.out.println("์—์–ด์ปจ ์‚ฌ์šฉ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค."); return;
    }
}

* ๋ฐ”๋žŒ ์„ธ๊ธฐ๋Š” ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์˜จ๋„๊ฐ€ ๋ณ€ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋‹ค๋ฅด๋‹ค.

1๋‹จ๊ณ„๋ฉด 60์ดˆ, 2๋‹จ๊ณ„๋ฉด 30์ดˆ,  3๋‹จ๊ณ„๋ฉด 20์ดˆ์— 1๋„์”ฉ ์˜จ๋„๊ฐ€ ์„ค์ •์˜จ๋„๋กœ ๋งž์ถฐ์ง€๋„๋ก ์„ค์ •ํ–ˆ๋‹ค.

 

* ๋”ฐ๋ผ์„œ -5๋„์—์„œ 20๋„๋กœ ๋งž์ถ”๋ ค๋ฉด 3๋‹จ๊ณ„์—ฌ๋„ ํ•œ..12๋ถ„ ์ •๋„ ๊ฑธ๋ฆฐ๋‹ค.

๊ฒฐ๊ณผ๊ฐ’๋งŒ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์„ธํŒ… ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ๋Œ€๋กœ ๋ƒ…๋‘ฌ๋ดค๋‹ค. ใ…‹ใ…‹ใ…‹

 

20์ดˆ ๊ฒฝ๊ณผ..

 

์‹œ๊ฐ„์€ ํ˜๋Ÿฌํ˜๋Ÿฌ...

 

์ถฅ๋‹ค..์ถ”์›Œ..

 

๊ทธ๋ž˜ ์กฐ๊ธˆ๋งŒ ๋”...

 

๊ดœํžˆ 20๋„๋กœ ์„ค์ •ํ–ˆ๋‚˜..

๊ทธ๋ƒฅ ๋Œ€์ถฉ 10๋„๋กœ ํ• ๊ฑธ.. . ..

๋“œ๋””์–ด! ์˜จ๋„๊ฐ€ 20๋„๊ฐ€ ๋˜์–ด ์—์–ด์ปจ์ด ์ข…๋ฃŒ๋๋‹ค.

(์ง์ง)

profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!