-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWeatherData.java
More file actions
84 lines (71 loc) · 3.39 KB
/
WeatherData.java
File metadata and controls
84 lines (71 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.*;
class WeatherData {
double temperature;
double humidity;
public WeatherData(double temperature, double humidity) {
this.temperature = temperature;
this.humidity = humidity;
}
public double getTemperature() {
return temperature;
}
public double getHumidity() {
return humidity;
}
}
public class weatherAnalyzer {
public static Map<String, Integer> countDaysByTemperatureRange(List<WeatherData> weatherDataList) {
Map<String, Integer> countByTemperatureRange = new HashMap<>();
for (WeatherData data : weatherDataList) {
String temperatureRange = getTemperatureRange(data.temperature);
countByTemperatureRange.put(temperatureRange, countByTemperatureRange.getOrDefault(temperatureRange, 0) + 1);
}
return countByTemperatureRange;
}
public static Map<String, Double> calculateAverageHumidityByTemperatureRange(List<WeatherData> weatherDataList) {
Map<String, Double> avgHumidityByTemperatureRange = new HashMap<>();
Map<String, Integer> countByTemperatureRange = new HashMap<>();
for (WeatherData data : weatherDataList) {
String temperatureRange = getTemperatureRange(data.temperature);
double currentHumidity = data.getHumidity();
double totalHumidity = avgHumidityByTemperatureRange.getOrDefault(temperatureRange, 0.0) * countByTemperatureRange.getOrDefault(temperatureRange, 0);
totalHumidity += currentHumidity;
countByTemperatureRange.put(temperatureRange, countByTemperatureRange.getOrDefault(temperatureRange, 0) + 1);
avgHumidityByTemperatureRange.put(temperatureRange, totalHumidity / countByTemperatureRange.get(temperatureRange));
}
return avgHumidityByTemperatureRange;
}
public static String getTemperatureRange(double temperature) {
if (temperature < 0) {
return "<0°C";
} else if (temperature < 10) {
return "0-10°C";
} else if (temperature < 20) {
return "10-20°C";
} else {
return ">20°C";
}
}
public static void main(String[] args) {
// Sample weather data
List<WeatherData> weatherDataList = new ArrayList<>();
weatherDataList.add(new WeatherData(-5, 80));
weatherDataList.add(new WeatherData(5, 70));
weatherDataList.add(new WeatherData(15, 65));
weatherDataList.add(new WeatherData(25, 75));
weatherDataList.add(new WeatherData(18, 60));
// Count days by temperature range
Map<String, Integer> daysByTemperatureRange = countDaysByTemperatureRange(weatherDataList);
// Calculate average humidity by temperature range
Map<String, Double> avgHumidityByTemperatureRange = calculateAverageHumidityByTemperatureRange(weatherDataList);
// Display results
System.out.println("Days with temperatures within each range:");
for (Map.Entry<String, Integer> entry : daysByTemperatureRange.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + " days");
}
System.out.println("\nAverage humidity for each temperature range:");
for (Map.Entry<String, Double> entry : avgHumidityByTemperatureRange.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + "%");
}
}
}