미니 프로젝트 세트 5: 날씨 관측소 리포트¶
이름: ________
시간: 40분
7일 동안의 일 최고 기온을 HashMap에 저장하고 날씨 리포트를 출력하는 Java 프로그램을 작성하세요. WeatherStation 클래스는 ArrayList로 날짜 순서를 유지합니다.
학습 목표¶
ArrayList와HashMap두 컬렉션을 가진 클래스를 만든다.- 하나의 메서드로 두 컬렉션에 값을 추가한다.
HashMap에서 키로 값을 꺼낸다.- 값을 탐색하고 최상위 결과를 기억한다.
- 조건을 만족하는 값의 개수를 센다.
요구 사항¶
- 다음 구성으로
WeatherStation클래스를 만든다. - private
ArrayList<String> dayOrder와 privateHashMap<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형변환이 필요하다.