Advertisement
SashkoKlincharov

[Java][НП] - Дневни температури

Aug 27th, 2021
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.88 KB | None | 0 0
  1.  
  2.  
  3. Да се имплементира класа DailyTemperatures во која се вчитуваат температури на воздухот (цели броеви) за различни денови од годината (број од 1 до 366). Температурите за еден ден се во еден ред во следниот формат (пример): 137 23C 15C 28C. Првиот број претставува денот во годината, а потоа следуваат непознат број на мерења на температури за тој ден во скала во Целзиусови степени (C) или Фаренхајтови степени (F).
  4.  
  5. Во оваа класа да се имплементираат методите:
  6.  
  7. DailyTemperatures() - default конструктор
  8. void readTemperatures(InputStream inputStream) - метод за вчитување на податоците од влезен тек
  9. void writeDailyStats(OutputStream outputStream, char scale) - метод за печатање на дневна статистика (вкупно мерења, минимална температура, максимална температура, просечна температура) за секој ден, подредени во растечки редослед според денот. Вториот аргумент scale одредува во која скала се печатат температурите C - Целзиусова, F - Фаренхајтова. Форматот за печатање на статистиката за одреден ден е следниот:
  10.  
  11. [ден]: Count: [вк. мерења - 3 места] Min: [мин. температура] Max: [макс. температура] Avg: [просек ]
  12.  
  13. Минималната, максималната и просечната температура се печатат со 6 места, од кои 2 децимални, а по бројот се запишува во која скала е температурата (C/F).
  14.  
  15. Формула за конверзија од Целзиусуви во Фаренхајтови: T∗95+32
  16.  
  17. Формула за конверзија од Фаренхајтови во Целзиусуви: (T−32)∗59
  18.  
  19. Забелешка: да се постигне иста точност како во резултатите од решението, за пресметување на просекот и конверзијата во различна скала температурите се чуваат со тип Double.
  20.  
  21.  
  22.  
  23. import java.io.*;
  24. import java.util.ArrayList;
  25. import java.util.Collections;
  26. import java.util.DoubleSummaryStatistics;
  27. import java.util.List;
  28.  
  29. abstract class Temperature {
  30. private int value;
  31. private char type;
  32.  
  33. public Temperature(int value, char type) {
  34. this.value = value;
  35. this.type = type;
  36. }
  37.  
  38. public static Temperature createTemperatureByType(char type, int value) {
  39. switch (type) {
  40. case 'C':
  41. return new TemperatureCelsius(value, type);
  42. case 'F':
  43. return new TemperatureFahrenheit(value, type);
  44. default:
  45. return null;
  46. }
  47. }
  48.  
  49. public char getType() {
  50. return type;
  51. }
  52.  
  53. public int getValue() {
  54. return value;
  55. }
  56.  
  57. public void setValue(int value) {
  58. this.value = value;
  59. }
  60.  
  61. public void setType(char type) {
  62. this.type = type;
  63. }
  64.  
  65. @Override
  66. public String toString() {
  67. return "Temperature{" +
  68. "value=" + value +
  69. ", type=" + type +
  70. '}';
  71. }
  72.  
  73. abstract double getValueToCelsius();
  74.  
  75. abstract double getValueToFahrenheit();
  76.  
  77.  
  78. }
  79.  
  80. class TemperatureCelsius extends Temperature {
  81.  
  82. public TemperatureCelsius(int value, char type) {
  83. super(value, type);
  84. }
  85.  
  86. @Override
  87. double getValueToCelsius() {
  88. return super.getValue();
  89. }
  90.  
  91. @Override
  92. double getValueToFahrenheit() {
  93. return (super.getValue() * 9.0) / 5 + 32;
  94. }
  95. }
  96.  
  97. class TemperatureFahrenheit extends Temperature {
  98.  
  99. public TemperatureFahrenheit(int value, char type) {
  100. super(value, type);
  101. }
  102.  
  103.  
  104. @Override
  105. double getValueToFahrenheit() {
  106. return super.getValue();
  107. }
  108.  
  109. @Override
  110. double getValueToCelsius() {
  111. return (super.getValue() - 32) * 5.0 / 9.0;
  112. }
  113.  
  114.  
  115. }
  116.  
  117. class DailyMeasurements implements Comparable<DailyMeasurements> {
  118. private int day;
  119. private List<Temperature> temperatures;
  120.  
  121. public DailyMeasurements(int day, List<Temperature> temperatures) {
  122. this.day = day;
  123. this.temperatures = temperatures;
  124. }
  125.  
  126. public static DailyMeasurements createDailyMeasurement(String line) {
  127. String[] parts = line.split("\\s+");
  128. int day = Integer.parseInt(parts[0]);
  129. List<Temperature> pom = new ArrayList<>();
  130. for (int i = 1; i < parts.length; i++) {
  131. char type = parts[i].charAt(parts[i].length() - 1);
  132. int value = Integer.parseInt(parts[i].substring(0, parts[i].length() - 1));
  133. Temperature temperature = Temperature.createTemperatureByType(type, value);
  134. pom.add(temperature);
  135. }
  136. return new DailyMeasurements(day, pom);
  137. }
  138.  
  139.  
  140. @Override
  141. public int compareTo(DailyMeasurements o) {
  142. return Integer.compare(this.day, o.day);
  143. }
  144.  
  145. public String print(char scale) {
  146. // 11: Count: 7 Min: 38.33C Max: 40.56C Avg: 39.44C
  147. // [ден]: Count: [вк. мерења - 3 места] Min: [мин. температура] Max: [макс. температура] Avg: [просек ]
  148. DoubleSummaryStatistics dss =
  149. temperatures
  150. .stream()
  151. .mapToDouble(each ->
  152. (scale == 'C') ? each.getValueToCelsius() : each.getValueToFahrenheit())
  153. .summaryStatistics();
  154. return String.format("%3d: Count: %3d Min: %6.2f%c Max: %6.2f%c Avg: %6.2f%c",
  155. day,
  156. dss.getCount(),
  157. dss.getMin(),
  158. scale,
  159. dss.getMax(),
  160. scale,
  161. dss.getAverage(),
  162. scale);
  163. }
  164. }
  165.  
  166. class DailyTemperatures {
  167. private List<DailyMeasurements> list;
  168.  
  169. public DailyTemperatures() {
  170. this.list = new ArrayList<>();
  171. }
  172.  
  173. public void readTemperatures(InputStream inputStream) throws IOException {
  174. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  175. String line = null;
  176. while ((line = br.readLine()) != null) {
  177. list.add(DailyMeasurements.createDailyMeasurement(line));
  178. }
  179. }
  180.  
  181. public void writeDailyStats(OutputStream out, char scale) {
  182. PrintWriter pw = new PrintWriter(new OutputStreamWriter(out), true);
  183. Collections.sort(list, DailyMeasurements::compareTo);
  184. list.stream().forEach(each -> pw.println(each.print(scale)));
  185. }
  186. }
  187.  
  188. public class DailyTemperatureTest {
  189. public static void main(String[] args) throws IOException {
  190. DailyTemperatures dailyTemperatures = new DailyTemperatures();
  191. dailyTemperatures.readTemperatures(System.in);
  192. System.out.println("=== Daily temperatures in Celsius (C) ===");
  193. dailyTemperatures.writeDailyStats(System.out, 'C');
  194. System.out.println("=== Daily temperatures in Fahrenheit (F) ===");
  195. dailyTemperatures.writeDailyStats(System.out, 'F');
  196. }
  197. }
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204. Sample input
  205.  
  206. 317 24C 29C 28C 29C
  207. 140 47F 49F 46F 46F 47F 49F 48F 50F 45F 47F 46F 49F 50F 47F 50F 49F 49F 47F 45F
  208. 299 18C 17C 17C 18C 16C 19C 16C 16C 17C 18C 21C 21C
  209. 257 30C
  210. 231 13F 17F 16F 14F 13F 15F 18F 16F 15F 13F 16F 13F 13F 16F 18F
  211. 113 21F
  212. 133 69F 68F
  213. 65 89F 92F 90F 91F 88F 92F 88F 89F 93F 92F 92F 89F 92F 90F 91F
  214. 235 41F 41F 40F 36F 38F 41F 37F 40F 37F 37F 41F 36F 40F 36F 36F 36F 41F 37F
  215. 131 2C 3C 1C 0C 2C 4C 3C -1C -1C 2C 2C 3C 0C -1C 0C
  216. 335 70F 71F 66F 70F 70F 67F 67F 70F 68F 66F 70F
  217. 64 35C 36C 32C 34C 33C 31C 33C 35C 35C 31C 35C 32C 36C 32C 35C 34C 36C
  218. 302 92F 93F 90F 95F 93F 91F 93F 90F 92F 92F 95F 91F 95F 92F 92F 91F 94F 90F 95F
  219. 306 34C 34C 32C 33C 37C 37C 35C 37C
  220. 363 42F 40F 43F 42F 38F 40F 38F 40F 40F 38F
  221. 157 74F 71F 75F 72F 71F 71F 73F 76F 72F 73F 75F 75F 71F 71F 76F
  222. 91 98F 100F 102F 102F 99F 101F 102F
  223. 311 24C 22C 21C 23C 22C 23C 23C 23C 24C
  224. 340 44F 43F 41F 40F 43F 43F 43F 43F 43F 44F 44F 44F 45F 42F
  225. 11 101F 103F 102F 102F 104F 104F 105F
  226. 315 74F 71F 73F 74F
  227. 203 86F 86F 84F 83F 83F 85F
  228. 33 -10C -6C -9C -10C -6C
  229. 224 0C -1C 0C 3C -2C -1C 1C -1C 0C
  230. 88 34C 30C 30C 32C 32C 33C 34C 33C 29C 34C 32C 32C
  231. 55 13C 10C 9C 14C 14C 10C 13C 12C 9C 13C 9C 10C 9C 11C 12C
  232. 34 4C 1C 6C 3C 1C 3C 5C
  233. 103 25C 26C 30C 27C 30C 28C 29C 29C 29C 28C 30C 25C
  234. 24 -1C 2C
  235. 230 51F 51F 55F 54F 55F 55F 52F 54F 52F 55F 56F
  236. 98 14C
  237. 160 94F 92F 92F 95F 92F 96F 96F 93F 92F 93F 97F 92F 96F 95F 92F 94F
  238. 206 49F 53F 52F 52F 53F 52F 48F 48F 48F 49F 53F 49F 50F 52F 50F 53F 50F 49F 52F 51F
  239.  
  240. Sample output
  241.  
  242. === Daily temperatures in Celsius (C) ===
  243. 11: Count: 7 Min: 38.33C Max: 40.56C Avg: 39.44C
  244. 24: Count: 2 Min: -1.00C Max: 2.00C Avg: 0.50C
  245. 33: Count: 5 Min: -10.00C Max: -6.00C Avg: -8.20C
  246. 34: Count: 7 Min: 1.00C Max: 6.00C Avg: 3.29C
  247. 55: Count: 15 Min: 9.00C Max: 14.00C Avg: 11.20C
  248. 64: Count: 17 Min: 31.00C Max: 36.00C Avg: 33.82C
  249. 65: Count: 15 Min: 31.11C Max: 33.89C Avg: 32.52C
  250. 88: Count: 12 Min: 29.00C Max: 34.00C Avg: 32.08C
  251. 91: Count: 7 Min: 36.67C Max: 38.89C Avg: 38.10C
  252. 98: Count: 1 Min: 14.00C Max: 14.00C Avg: 14.00C
  253. 103: Count: 12 Min: 25.00C Max: 30.00C Avg: 28.00C
  254. 113: Count: 1 Min: -6.11C Max: -6.11C Avg: -6.11C
  255. 131: Count: 15 Min: -1.00C Max: 4.00C Avg: 1.27C
  256. 133: Count: 2 Min: 20.00C Max: 20.56C Avg: 20.28C
  257. 140: Count: 19 Min: 7.22C Max: 10.00C Avg: 8.71C
  258. 157: Count: 15 Min: 21.67C Max: 24.44C Avg: 22.81C
  259. 160: Count: 16 Min: 33.33C Max: 36.11C Avg: 34.34C
  260. 203: Count: 6 Min: 28.33C Max: 30.00C Avg: 29.17C
  261. 206: Count: 20 Min: 8.89C Max: 11.67C Avg: 10.36C
  262. 224: Count: 9 Min: -2.00C Max: 3.00C Avg: -0.11C
  263. 230: Count: 11 Min: 10.56C Max: 13.33C Avg: 12.02C
  264. 231: Count: 15 Min: -10.56C Max: -7.78C Avg: -9.41C
  265. 235: Count: 18 Min: 2.22C Max: 5.00C Avg: 3.55C
  266. 257: Count: 1 Min: 30.00C Max: 30.00C Avg: 30.00C
  267. 299: Count: 12 Min: 16.00C Max: 21.00C Avg: 17.83C
  268. 302: Count: 19 Min: 32.22C Max: 35.00C Avg: 33.57C
  269. 306: Count: 8 Min: 32.00C Max: 37.00C Avg: 34.88C
  270. 311: Count: 9 Min: 21.00C Max: 24.00C Avg: 22.78C
  271. 315: Count: 4 Min: 21.67C Max: 23.33C Avg: 22.78C
  272. 317: Count: 4 Min: 24.00C Max: 29.00C Avg: 27.50C
  273. 335: Count: 11 Min: 18.89C Max: 21.67C Avg: 20.35C
  274. 340: Count: 14 Min: 4.44C Max: 7.22C Avg: 6.11C
  275. 363: Count: 10 Min: 3.33C Max: 6.11C Avg: 4.50C
  276. === Daily temperatures in Fahrenheit (F) ===
  277. 11: Count: 7 Min: 101.00F Max: 105.00F Avg: 103.00F
  278. 24: Count: 2 Min: 30.20F Max: 35.60F Avg: 32.90F
  279. 33: Count: 5 Min: 14.00F Max: 21.20F Avg: 17.24F
  280. 34: Count: 7 Min: 33.80F Max: 42.80F Avg: 37.91F
  281. 55: Count: 15 Min: 48.20F Max: 57.20F Avg: 52.16F
  282. 64: Count: 17 Min: 87.80F Max: 96.80F Avg: 92.88F
  283. 65: Count: 15 Min: 88.00F Max: 93.00F Avg: 90.53F
  284. 88: Count: 12 Min: 84.20F Max: 93.20F Avg: 89.75F
  285. 91: Count: 7 Min: 98.00F Max: 102.00F Avg: 100.57F
  286. 98: Count: 1 Min: 57.20F Max: 57.20F Avg: 57.20F
  287. 103: Count: 12 Min: 77.00F Max: 86.00F Avg: 82.40F
  288. 113: Count: 1 Min: 21.00F Max: 21.00F Avg: 21.00F
  289. 131: Count: 15 Min: 30.20F Max: 39.20F Avg: 34.28F
  290. 133: Count: 2 Min: 68.00F Max: 69.00F Avg: 68.50F
  291. 140: Count: 19 Min: 45.00F Max: 50.00F Avg: 47.68F
  292. 157: Count: 15 Min: 71.00F Max: 76.00F Avg: 73.07F
  293. 160: Count: 16 Min: 92.00F Max: 97.00F Avg: 93.81F
  294. 203: Count: 6 Min: 83.00F Max: 86.00F Avg: 84.50F
  295. 206: Count: 20 Min: 48.00F Max: 53.00F Avg: 50.65F
  296. 224: Count: 9 Min: 28.40F Max: 37.40F Avg: 31.80F
  297. 230: Count: 11 Min: 51.00F Max: 56.00F Avg: 53.64F
  298. 231: Count: 15 Min: 13.00F Max: 18.00F Avg: 15.07F
  299. 235: Count: 18 Min: 36.00F Max: 41.00F Avg: 38.39F
  300. 257: Count: 1 Min: 86.00F Max: 86.00F Avg: 86.00F
  301. 299: Count: 12 Min: 60.80F Max: 69.80F Avg: 64.10F
  302. 302: Count: 19 Min: 90.00F Max: 95.00F Avg: 92.42F
  303. 306: Count: 8 Min: 89.60F Max: 98.60F Avg: 94.78F
  304. 311: Count: 9 Min: 69.80F Max: 75.20F Avg: 73.00F
  305. 315: Count: 4 Min: 71.00F Max: 74.00F Avg: 73.00F
  306. 317: Count: 4 Min: 75.20F Max: 84.20F Avg: 81.50F
  307. 335: Count: 11 Min: 66.00F Max: 71.00F Avg: 68.64F
  308. 340: Count: 14 Min: 40.00F Max: 45.00F Avg: 43.00F
  309. 363: Count: 10 Min: 38.00F Max: 43.00F Avg: 40.10F
  310.  
  311.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement