SashkoKlincharov

[Java][НП] - Мерна станица

Aug 26th, 2021
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.13 KB | None | 0 0
  1.  
  2.  
  3. Во една метеролошка станица на секои 5 минути пристигнуваат податоци за временските услови (температура, влажност на воздухот, ветар, видливост, време). Пример за вакви податоци:
  4.  
  5. температура: 13 степени
  6. влажност: 98%
  7. ветар: 11.2 km/h
  8. видливост: 14 km
  9. време: 28.12.2013 14:37:55 (dd.MM.yyyy HH:mm:ss).
  10.  
  11. Потребно е да се имплементира класа WeatherStation која ќе ги чува податоците за временските услови за последните x денови (при додавање на податоци за ново мерење, сите мерења чие што време е постаро за x денови од новото се бришат ). Исто така ако времето на новото мерење кое се додава се разликува за помалку од 2.5 минути од времето на некое претходно додадено мерење, тоа треба да се игнорира (не се додава).
  12.  
  13. Да се имплементираат следните методи на класата WeatherStation:
  14.  
  15. WeatherStation(int days) - конструктор со аргумент бројот на денови за кои се чуваат мерења
  16. public void addMeasurment(float temperature, float wind, float humidity, float visibility, Date date) - додавање на податоци за ново мерење
  17. public int total() - го враќа вкупниот број на мерења кои се чуваат
  18. public void status(Date from, Date to) - ги печати сите мерења во периодот од from до to подредени според датумот во растечки редослед и на крај ја печати просечната температура во овој период. Ако не постојат мерења во овој период се фрла исклучок од тип RuntimeException (вграден во Јава).
  19.  
  20. Пример за форматот на излезот:
  21.  
  22. 24.6 80.2 km/h 28.7% 51.7 km Tue Dec 17 23:40:15 CET 2013
  23. 23.5 32.2 km/h 16.5% 187.2 km Tue Dec 17 23:45:15 CET 2013
  24. 13.2 67.1 km/h 18.9% 135.4 km Tue Dec 17 23:50:15 CET 2013
  25. Avarage temperature: 20.43
  26.  
  27.  
  28.  
  29. import java.text.DateFormat;
  30. import java.text.ParseException;
  31. import java.text.SimpleDateFormat;
  32. import java.util.*;
  33.  
  34. class InfoStanica{
  35. float temperature;
  36. float humidity;
  37. float wind;
  38. float visibility;
  39. Date date;
  40.  
  41. public InfoStanica(float temperature, float humidity, float wind, float visibility, Date date) {
  42. this.temperature = temperature;
  43. this.humidity = humidity;
  44. this.wind = wind;
  45. this.visibility = visibility;
  46. this.date = date;
  47. }
  48.  
  49. @Override
  50. public String toString() {
  51. DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz YYYY");
  52. return String.format("%.1f %.1f km/h %.1f%% %.1f km %s", temperature,wind,humidity,visibility,df.format(date));
  53. }
  54. }
  55.  
  56. class WeatherStation{
  57. List<InfoStanica> items;
  58. int days;
  59.  
  60. public WeatherStation(int days) {
  61. this.days = days;
  62. this.items = new ArrayList<>();
  63. }
  64.  
  65. public void addMeasurment(float temperature, float wind, float humidity, float visibility,Date date) {
  66. if (items.size() == 0) {
  67. items.add(new InfoStanica(temperature, humidity, wind, visibility, date));
  68. return;
  69. }
  70. Iterator<InfoStanica> iterator = items.iterator();
  71. while(iterator.hasNext()){
  72. InfoStanica s = iterator.next();
  73. if(!proveriDaliVoInterval(s.date,date))
  74. iterator.remove();
  75. if(!razlika2ipolminuti(s.date,date))
  76. return;
  77. }
  78. items.add(new InfoStanica(temperature, humidity, wind, visibility, date));
  79. }
  80.  
  81. public void status(Date from, Date to) {
  82. double sum =0;
  83. int count =0;
  84. for (InfoStanica s : items) {
  85.  
  86. if (!(s.date.before(from)||s.date.after(to))) {
  87. long measureTime = s.date.getHours() * 60 + s.date.getMinutes();
  88. long fromTime = from.getHours() * 60 + from.getMinutes();
  89. long toTime = to.getHours() * 60 + to.getMinutes();
  90.  
  91. if (measureTime >= fromTime || measureTime <= toTime){
  92. System.out.println(s);
  93. sum += s.temperature;
  94. ++count;
  95. }
  96. }
  97. }
  98.  
  99. if (count == 0 )
  100. throw new RuntimeException();
  101. else
  102. System.out.printf("Average temperature: %.2f",sum/count);
  103. }
  104.  
  105. private boolean razlika2ipolminuti(Date dateOdLista, Date dateZaProverka) {
  106. // DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
  107. // String date1 = df.format(dateOdLista);
  108. // String date2 = df.format(dateZaProverka);
  109. long vreme1 = dateOdLista.getTime();
  110. long vreme2 = dateZaProverka.getTime();
  111. return Math.abs(vreme1 - vreme2) > 150000;
  112. }
  113.  
  114. private boolean proveriDaliVoInterval(Date dateOdLista, Date dateZaProverka) {
  115. DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
  116. String date1 = df.format(dateOdLista);
  117. String date2 = df.format(dateZaProverka);
  118. if(!date1.split(" ")[0].split("\\.")[2].equals(date2.split(" ")[0].split("\\.")[2]))
  119. return false;
  120. else if(!date1.split(" ")[0].split("\\.")[1].equals(date2.split(" ")[0].split("\\.")[1]))
  121. return false;
  122.  
  123. return Integer.parseInt(date2.split(" ")[0].split("\\.")[0]) - Integer.parseInt(date1.split(" ")[0].split("\\.")[0]) < days;
  124. }
  125.  
  126. public int total() {
  127. return items.size();
  128. }
  129.  
  130. }
  131.  
  132.  
  133. public class WeatherStationTest {
  134. public static void main(String[] args) throws ParseException {
  135. Scanner scanner = new Scanner(System.in);
  136. DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
  137. int n = scanner.nextInt();
  138. scanner.nextLine();
  139. WeatherStation ws = new WeatherStation(n);
  140. while (true) {
  141. String line = scanner.nextLine();
  142. if (line.equals("=====")) {
  143. break;
  144. }
  145. String[] parts = line.split(" ");
  146. float temp = Float.parseFloat(parts[0]);
  147. float wind = Float.parseFloat(parts[1]);
  148. float hum = Float.parseFloat(parts[2]);
  149. float vis = Float.parseFloat(parts[3]);
  150. line = scanner.nextLine();
  151. Date date = df.parse(line);
  152. ws.addMeasurment(temp, wind, hum, vis, date);
  153. }
  154. String line = scanner.nextLine();
  155. Date from = df.parse(line);
  156. line = scanner.nextLine();
  157. Date to = df.parse(line);
  158. scanner.close();
  159. System.out.println(ws.total());
  160. try {
  161. ws.status(from, to);
  162. } catch (RuntimeException e) {
  163. System.out.println(e);
  164. }
  165. }
  166. }
  167.  
  168. // vashiot kod ovde
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178. Sample input
  179.  
  180. 5
  181. 22.1 18.9 1.3 24.6
  182. 10.12.2013 21:30:15
  183. 22.1 18.9 1.3 24.6
  184. 11.12.2013 22:30:15
  185. 22.1 18.9 1.3 24.6
  186. 17.12.2013 23:30:15
  187. 41.8 9.4 40.8 20.7
  188. 17.12.2013 23:35:15
  189. 24.6 28.7 80.2 51.7
  190. 17.12.2013 23:40:15
  191. 24.6 28.7 80.2 51.7
  192. 17.12.2013 23:40:25
  193. 24.6 28.7 80.2 51.7
  194. 17.12.2013 23:39:36
  195. 23.5 16.5 32.2 187.2
  196. 17.12.2013 23:45:15
  197. 13.2 18.9 67.1 135.4
  198. 17.12.2013 23:50:15
  199. 13.2 18.9 67.1 135.4
  200. 17.12.2013 23:51:12
  201. 31.6 48.3 6.0 86.6
  202. 17.12.2013 23:55:15
  203. 18.0 37.6 15.9 37.7
  204. 18.12.2013 00:00:15
  205. =====
  206. 17.12.2013 23:35:15
  207. 17.12.2013 23:50:15
  208.  
  209. Sample output
  210.  
  211. 7
  212. 41.8 9.4 km/h 40.8% 20.7 km Tue Dec 17 23:35:15 GMT 2013
  213. 24.6 28.7 km/h 80.2% 51.7 km Tue Dec 17 23:40:15 GMT 2013
  214. 23.5 16.5 km/h 32.2% 187.2 km Tue Dec 17 23:45:15 GMT 2013
  215. 13.2 18.9 km/h 67.1% 135.4 km Tue Dec 17 23:50:15 GMT 2013
  216. Average temperature: 25.77
  217.  
  218.  
Add Comment
Please, Sign In to add comment