Advertisement
Martina312

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

Aug 20th, 2020
1,240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.23 KB | None | 0 0
  1. import java.io.InputStream;
  2. import java.io.OutputStream;
  3. import java.util.*;
  4.  
  5. class Day{
  6.     private int numOfDay; //broj na denot vo godinata;
  7.     private List<Double> temperatures; //dnevni merenja na temperatura
  8.     private char scale; //kako se izmereni F ili C
  9.  
  10.     public Day(int numOfDay, List<Double> temperatures, char scale) {
  11.         this.numOfDay = numOfDay;
  12.         this.temperatures = temperatures;
  13.         this.scale = scale;
  14.     }
  15.  
  16.     public int getNumOfDay() {
  17.         return numOfDay;
  18.     }
  19.  
  20.     public List<Double> getTemperatures() {
  21.         return temperatures;
  22.     }
  23.  
  24.     public char getScale() {
  25.         return scale;
  26.     }
  27.  
  28.     public double getMinTemp(){
  29.         return temperatures.stream().min(Double::compareTo).get();
  30.     }
  31.  
  32.     public double getMaxTemp(){
  33.         return temperatures.stream().max(Double::compareTo).get();
  34.     }
  35.  
  36.     public double getAvgTemp(){
  37.         return temperatures.stream().mapToDouble(i -> i).sum() / (temperatures.size() *1.0);
  38.     }
  39.  
  40.     public void convertToC(){
  41.         for (int i=0; i<temperatures.size(); i++){
  42.             temperatures.set(i, ((temperatures.get(i)-32)*5)/9);
  43.         }
  44.         this.scale = 'C';        
  45.     }
  46.  
  47.     public void convertToF(){
  48.         for (int i=0; i<temperatures.size(); i++){
  49.             temperatures.set(i, ((temperatures.get(i)*9)/5)+32);
  50.         }
  51.         this.scale = 'F';
  52.     }
  53. }
  54.  
  55. class DailyTemperatures{
  56.     Set<Day> days;
  57.  
  58.     public DailyTemperatures() {
  59.         this.days = new TreeSet<>(Comparator.comparing(Day::getNumOfDay));
  60.     }
  61.  
  62.     public void readTemperatures(InputStream inputStream) {
  63.         Scanner in = new Scanner(inputStream);
  64.  
  65.         while (in.hasNextLine()){
  66.             String line = in.nextLine();
  67.             String [] parts = line.split("\\s+");
  68.  
  69.             Integer numOfDay = Integer.parseInt(parts[0]);
  70.             char scale = parts[1].charAt(parts[1].length()-1);
  71.             List<Double> temps = new ArrayList<>();
  72.  
  73.             for (int i=1; i<parts.length; i++){
  74.                 temps.add(Double.parseDouble(parts[i].substring(0,parts[i].length()-1)));
  75.             }
  76.  
  77.             days.add(new Day(numOfDay, temps, scale));
  78.         }
  79.     }
  80.  
  81.     public void writeDailyStats (OutputStream outputStream, char scale){
  82.         days.stream().forEach(day -> {
  83.             if (day.getScale() != scale){
  84.                 if (scale == 'F')
  85.                     day.convertToF();
  86.                 else
  87.                     day.convertToC();
  88.             }
  89.             System.out.println(String.format("%3d: Count: %3d Min: %6.2f%c Max: %6.2f%c Avg: %6.2f%c", day.getNumOfDay(), day.getTemperatures().size(), day.getMinTemp(), scale, day.getMaxTemp(), scale, day.getAvgTemp(), scale));
  90.         });
  91.  
  92.     }
  93. }
  94. public class DailyTemperatureTest {
  95.     public static void main(String[] args) {
  96.         DailyTemperatures dailyTemperatures = new DailyTemperatures();
  97.         dailyTemperatures.readTemperatures(System.in);
  98.         System.out.println("=== Daily temperatures in Celsius (C) ===");
  99.         dailyTemperatures.writeDailyStats(System.out, 'C');
  100.         System.out.println("=== Daily temperatures in Fahrenheit (F) ===");
  101.         dailyTemperatures.writeDailyStats(System.out, 'F');
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement