Advertisement
Dimitrija

Дневни температури (35 поени)

Feb 13th, 2022
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.23 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Arrays;
  3. import java.util.DoubleSummaryStatistics;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6. import java.util.stream.Collectors;
  7.  
  8. interface MeasuredTemperature{
  9.     double getFahrenheit();
  10.     double getCelsius();
  11. }
  12.  
  13. class TemperatureF implements MeasuredTemperature{
  14.     private final Double tempF;
  15.  
  16.     public TemperatureF(String tempF) {
  17.         this.tempF = Double.parseDouble(tempF.substring(0,tempF.length()-1));
  18.     }
  19.  
  20.     @Override
  21.     public double getFahrenheit() {
  22.         return tempF;
  23.     }
  24.  
  25.     @Override
  26.     public double getCelsius() {
  27.         return ((tempF-32)*5)/9;
  28.     }
  29. }
  30.  
  31.  
  32. class TemperatureC implements MeasuredTemperature{
  33.     private final Double tempC;
  34.  
  35.     public TemperatureC(String tempC) {
  36.         this.tempC = Double.parseDouble(tempC.substring(0,tempC.length()-1));
  37.     }
  38.  
  39.     @Override
  40.     public double getFahrenheit() {
  41.         return ((tempC*9)/5 + 32);
  42.     }
  43.  
  44.     @Override
  45.     public double getCelsius() {
  46.         return tempC;
  47.     }
  48. }
  49.  
  50.  
  51. class TemperatureInADay implements Comparable<TemperatureInADay>{
  52.  
  53.     private final int day;
  54.     private final List<MeasuredTemperature> measuredTemperatureList;
  55.  
  56.     public TemperatureInADay(int day, List<MeasuredTemperature> measuredTemperatureList) {
  57.         this.day = day;
  58.         this.measuredTemperatureList = measuredTemperatureList;
  59.     }
  60.  
  61.     public static TemperatureInADay createTemperature(String line){
  62.         String[] arrayElements = line.split("\\s+");
  63.         int day = Integer.parseInt(arrayElements[0]);
  64.         List<MeasuredTemperature> measuredTemperatureList = new LinkedList<>();
  65.         Arrays.stream(arrayElements).skip(1)
  66.                 .forEach(
  67.                 element ->{
  68.                     if (element.charAt(element.length()-1) == 'F'){
  69.                         measuredTemperatureList.add(new TemperatureF(element));
  70.                     }
  71.                     else if (element.charAt(element.length()-1) == 'C'){
  72.                         measuredTemperatureList.add(new TemperatureC(element));
  73.                     }
  74.                 }
  75.         );
  76.         return new TemperatureInADay(day,measuredTemperatureList);
  77.  
  78.     }
  79.  
  80.     public String toString(char CF) {
  81.  
  82. //        [ден]: Count: [вк. мерења - 3 места] Min: [мин. температура] Max: [макс. температура] Avg: [просек ]
  83.  
  84.  
  85.         DoubleSummaryStatistics dss = measuredTemperatureList.stream().mapToDouble(x -> {
  86.             if (CF == 'F'){
  87.                 return x.getFahrenheit();
  88.             }
  89.             else{
  90.                 return x.getCelsius();
  91.             }
  92.  
  93.         }).summaryStatistics();
  94.  
  95.      return String.format("%3d: Count:% 4d Min:% 7.2f%c Max:% 7.2f%c Avg:% 7.2f%c", day, dss.getCount(), dss.getMin(), CF, dss.getMax(), CF, dss.getAverage(), CF);
  96.  
  97.     }
  98.  
  99.     @Override
  100.     public int compareTo(TemperatureInADay o) {
  101.         return Integer.compare(day,o.day);
  102.     }
  103. }
  104.  
  105.  
  106.  
  107. class DailyTemperatures{
  108.     private List<TemperatureInADay> temperatureList;
  109.     DailyTemperatures(){
  110.         temperatureList = new LinkedList<>();
  111.     }
  112.     void readTemperatures(InputStream inputStream){
  113.         BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
  114.  
  115.         temperatureList = bufferedReader.lines()
  116.                 .map(TemperatureInADay::createTemperature)
  117.                 .collect(Collectors.toList());
  118.  
  119.  
  120.  
  121.     }
  122.     void writeDailyStats(OutputStream outputStream, char scale){
  123.         PrintWriter printWriter = new PrintWriter(outputStream);
  124.  
  125.         temperatureList.stream().sorted().forEach(x->System.out.println(x.toString(scale)));
  126.  
  127.  
  128.     }
  129.  
  130. }
  131.  
  132.  
  133.  
  134.  
  135.  
  136. /**
  137.  * I partial exam 2016
  138.  */
  139. public class DailyTemperatureTest {
  140.     public static void main(String[] args) {
  141.         DailyTemperatures dailyTemperatures = new DailyTemperatures();
  142.         dailyTemperatures.readTemperatures(System.in);
  143.         System.out.println("=== Daily temperatures in Celsius (C) ===");
  144.         dailyTemperatures.writeDailyStats(System.out, 'C');
  145.         System.out.println("=== Daily temperatures in Fahrenheit (F) ===");
  146.         dailyTemperatures.writeDailyStats(System.out, 'F');
  147.     }
  148. }
  149.  
  150. // Vashiot kod ovde
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement