콘텐츠로 이동

미니 프로젝트 세트 5: 날씨 관측소 리포트

이름: ________

시간: 40분

7일 동안의 일 최고 기온을 HashMap에 저장하고 날씨 리포트를 출력하는 Java 프로그램을 작성하세요. WeatherStation 클래스는 ArrayList로 날짜 순서를 유지합니다.

학습 목표

  • ArrayListHashMap 두 컬렉션을 가진 클래스를 만든다.
  • 하나의 메서드로 두 컬렉션에 값을 추가한다.
  • HashMap에서 키로 값을 꺼낸다.
  • 값을 탐색하고 최상위 결과를 기억한다.
  • 조건을 만족하는 값의 개수를 센다.

요구 사항

  • 다음 구성으로 WeatherStation 클래스를 만든다.
  • private ArrayList<String> dayOrder와 private HashMap<String, Integer> readings
  • 두 컬렉션을 생성하는 생성자
  • addReading(String day, int temperature)dayOrder에 요일을 추가하고 readings에 기온을 저장한다
  • printReport()는 기록이 추가된 순서대로 요일별 한 줄씩 출력한다
  • bar(int temperature)# 문자로 이루어진 막대를 반환하며, # 하나는 5도를 나타낸다 (예: bar(22)"####")
  • averageTemperature()는 소수 부분이 있는 평균을 반환한다
  • hottestDay()는 가장 더운 날의 이름을 반환한다. 기온이 같으면 첫 번째 날을 유지한다
  • sunnyDays()는 기온 25 이상인 날의 개수를 반환한다
  • main에서 WeatherStation 객체를 하나 만들고 정확히 다음 기록을 추가한다.
station.addReading("Mon", 22);
station.addReading("Tue", 26);
station.addReading("Wed", 19);
station.addReading("Thu", 26);
station.addReading("Fri", 24);
station.addReading("Sat", 31);
station.addReading("Sun", 28);
  • 각 날은 다음 형식으로 출력한다.
Mon: 22C ####
  • 그다음 요약을 출력한다. 평균은 소수점 둘째 자리까지 출력한다.
  • 기온이 필요할 때마다 readings.get(day)를 사용한다. 추가 배열이나 다른 맵을 만들지 않는다.

예상 출력

Mon: 22C ####
Tue: 26C #####
Wed: 19C ###
Thu: 26C #####
Fri: 24C ####
Sat: 31C ######
Sun: 28C #####
Average temperature: 25.14C
Hottest day: Sat
Sunny days: 4

시작 코드

import java.util.ArrayList;
import java.util.HashMap;

class WeatherStation {
    // TODO: private 컬렉션 두 개와 생성자를 추가합니다.

    public void addReading(String day, int temperature) {
        // TODO
    }

    public void printReport() {
        // TODO
    }

    public String bar(int temperature) {
        // TODO
        return "";
    }

    public double averageTemperature() {
        // TODO
        return 0.0;
    }

    public String hottestDay() {
        // TODO
        return "";
    }

    public int sunnyDays() {
        // TODO
        return 0;
    }
}

public class Main {
    public static void main(String[] args) {
        WeatherStation station = new WeatherStation();

        station.addReading("Mon", 22);
        station.addReading("Tue", 26);
        station.addReading("Wed", 19);
        station.addReading("Thu", 26);
        station.addReading("Fri", 24);
        station.addReading("Sat", 31);
        station.addReading("Sun", 28);

        station.printReport();
        System.out.printf("Average temperature: %.2fC%n", station.averageTemperature());
        System.out.println("Hottest day: " + station.hottestDay());
        System.out.println("Sunny days: " + station.sunnyDays());
    }
}

제출 전 확인

  • addReading은 두 컬렉션을 모두 갱신해 동기화를 유지한다.
  • printReport()에서 dayOrder를 순회하며 각 기온을 readings.get(day)로 조회한다.
  • temperature / 5번 반복하는 반복문으로 막대를 만든다.
  • hottestDay()dayOrder의 첫 번째 날을 초기 후보로 시작한다.
  • 기온을 비교할 때는 >=가 아니라 >를 사용한다.
  • 평균을 계산하기 전 double 형변환이 필요하다.