미니 프로젝트 세트 5 모범답안: 날씨 관측소 리포트
완성 프로그램
import java.util.ArrayList;
import java.util.HashMap;
class WeatherStation {
private ArrayList<String> dayOrder;
private HashMap<String, Integer> readings;
public WeatherStation() {
dayOrder = new ArrayList<>();
readings = new HashMap<>();
}
public void addReading(String day, int temperature) {
dayOrder.add(day);
readings.put(day, temperature);
}
public void printReport() {
for (String day : dayOrder) {
int temperature = readings.get(day);
System.out.println(day + ": " + temperature + "C " + bar(temperature));
}
}
public String bar(int temperature) {
String result = "";
for (int i = 0; i < temperature / 5; i++) {
result += "#";
}
return result;
}
public double averageTemperature() {
int total = 0;
for (String day : dayOrder) {
total += readings.get(day);
}
return (double) total / dayOrder.size();
}
public String hottestDay() {
String bestDay = dayOrder.get(0);
for (String day : dayOrder) {
if (readings.get(day) > readings.get(bestDay)) {
bestDay = day;
}
}
return bestDay;
}
public int sunnyDays() {
int count = 0;
for (String day : dayOrder) {
if (readings.get(day) >= 25) {
count++;
}
}
return count;
}
}
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());
}
}
출력
Mon: 22C ####
Tue: 26C #####
Wed: 19C ###
Thu: 26C #####
Fri: 24C ####
Sat: 31C ######
Sun: 28C #####
Average temperature: 25.14C
Hottest day: Sat
Sunny days: 4
핵심 포인트
dayOrder(ArrayList)는 기록 순서를 유지하고, readings(HashMap)는 요일 이름으로 빠르게 조회한다.
addReading이 두 컬렉션을 동시에 갱신해 항상 동기화를 유지한다.
bar 메서드는 정수 나눗셈을 활용한다. temperature / 5가 # 문자의 개수다.
hottestDay()는 첫 번째 날부터 시작하고 >를 사용해 기온이 같을 때 첫 번째 날을 유지한다.
- 평균을 계산하기 전
double 형변환이 필요하다.