Advertisement
popovstefan

[NP] DailyTemperatures

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