Filip_Markoski

[NP] Дневни температури

Nov 13th, 2017
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.33 KB | None | 0 0
  1. import java.io.InputStream;
  2. import java.io.OutputStream;
  3. import java.io.PrintWriter;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.Comparator;
  7. import java.util.Scanner;
  8. import java.util.stream.IntStream;
  9.  
  10. /**
  11.  * I partial exam 2016
  12.  */
  13.  
  14.  
  15. class Temperature {
  16.     public final char FAHRENHEIT = 'F';
  17.     public final char CELSIUS = 'C';
  18.     char type;
  19.     double temperature;
  20.  
  21.     public Temperature(char type, double temperature) {
  22.         this.type = type;
  23.         this.temperature = temperature;
  24.     }
  25. }
  26.  
  27. class DailyTemperature implements Comparable<DailyTemperature> {
  28.     public final static char FAHRENHEIT = 'F';
  29.     public final static char CELSIUS = 'C';
  30.     char type;
  31.     int day;
  32.     ArrayList<Double> temperatures;
  33.  
  34.     public DailyTemperature(char type, int day, double numbers[]) {
  35.         this.type = type;
  36.         this.day = day;
  37.         this.temperatures = new ArrayList<>();
  38.  
  39.         /* Keep all temperatures here in CELSIUS */
  40.         if (type == CELSIUS) {
  41.             for (int i = 0; i < numbers.length; i++) {
  42.                 this.temperatures.add(numbers[i]);
  43.             }
  44.         } else if (type == FAHRENHEIT) {
  45.             for (int i = 0; i < numbers.length; i++) {
  46.                 this.temperatures.add(toCelsius(numbers[i]));
  47.             }
  48.         }
  49.  
  50.         //System.out.println(this);
  51.     }
  52.  
  53.     public int getCount() {
  54.         return temperatures.size();
  55.     }
  56.  
  57.     public double min() {
  58.         return temperatures.stream().min(Double::compare).get();
  59.     }
  60.  
  61.     public double max() {
  62.         return temperatures.stream().max(Double::compare).get();
  63.     }
  64.  
  65.     public double sum() {
  66.         return temperatures.stream().mapToDouble(Double::doubleValue).sum();
  67.     }
  68.  
  69.     public double average() {
  70.         return sum() / temperatures.size();
  71.     }
  72.  
  73.  
  74.     public double toCelsius(double Fahrenheit) {
  75.         return ((Fahrenheit - 32) * 5) / 9;
  76.     }
  77.  
  78.  
  79.     public double toFahrenheit(double Celsius) {
  80.         return ((Celsius * 9) / 5) + 32;
  81.     }
  82.  
  83.     public String toStringCelsius() {
  84.         return String.format("%3d: Count: %3d Min: %6.2fC Max: %6.2fC Avg: %6.2fC",
  85.                 day, getCount(), min(), max(), average());
  86.     }
  87.  
  88.     public String toStringFahrenheit() {
  89.         return String.format("%3d: Count: %3d Min: %6.2fF Max: %6.2fF Avg: %6.2fF",
  90.                 day, getCount(), toFahrenheit(min()), toFahrenheit(max()), toFahrenheit(average()));
  91.     }
  92.  
  93.     @Override
  94.     public String toString() {
  95.         return "DailyTemperature{" +
  96.                 "type=" + type +
  97.                 ", day=" + day +
  98.                 ", temperatures=" + temperatures +
  99.                 '}';
  100.     }
  101.  
  102.     @Override
  103.     public int compareTo(DailyTemperature that) {
  104.         if (this.day < that.day) return -1;
  105.         else if (this.day > that.day) return 1;
  106.         return 0;
  107.     }
  108. }
  109.  
  110. class DailyTemperatures {
  111.     ArrayList<DailyTemperature> dailyTemperatures;
  112.  
  113.     public DailyTemperatures() {
  114.         this.dailyTemperatures = new ArrayList<>();
  115.     }
  116.  
  117.     public void readTemperatures(InputStream inputStream) {
  118.         Scanner input = new Scanner(inputStream);
  119.         while (input.hasNextLine()) {
  120.             int day = input.nextInt();
  121.             String line = input.nextLine();
  122.             String parts[] = line.split(" ");
  123.             parts = Arrays.copyOfRange(parts, 1, parts.length);
  124.             char type = parts[0].toCharArray()[parts[0].length() - 1];
  125.             double numbers[] = new double[parts.length];
  126.  
  127.             for (int i = 0; i < parts.length; i++) {
  128.                 if (type == DailyTemperature.FAHRENHEIT) {
  129.                     numbers[i] = Double.parseDouble(parts[i].replace("F", ""));
  130.                 } else if (type == DailyTemperature.CELSIUS) {
  131.                     numbers[i] = Double.parseDouble(parts[i].replace("C", ""));
  132.                 }
  133.             }
  134.             /*
  135.             System.out.println(day);
  136.             System.out.println(Arrays.toString(parts));
  137.             System.out.println(type);
  138.             System.out.println(Arrays.toString(numbers));
  139.             */
  140.             dailyTemperatures.add(new DailyTemperature(type, day, numbers));
  141.         }
  142.     }
  143.  
  144.     public void writeDailyStats(OutputStream outputStream, char scale) {
  145.         dailyTemperatures.sort(DailyTemperature::compareTo);
  146.  
  147.         PrintWriter pw = new PrintWriter(outputStream);
  148.         if (scale == DailyTemperature.CELSIUS) {
  149.             for (int i = 0; i < dailyTemperatures.size(); i++) {
  150.                 pw.println(dailyTemperatures.get(i).toStringCelsius());
  151.             }
  152.  
  153.         } else if (scale == DailyTemperature.FAHRENHEIT) {
  154.             for (int i = 0; i < dailyTemperatures.size(); i++) {
  155.                 pw.println(dailyTemperatures.get(i).toStringFahrenheit());
  156.             }
  157.         }
  158.         pw.flush();
  159.     }
  160. }
  161.  
  162. public class DailyTemperatureTest {
  163.     public static void main(String[] args) {
  164.         DailyTemperatures dailyTemperatures = new DailyTemperatures();
  165.         dailyTemperatures.readTemperatures(System.in);
  166.         System.out.println("=== Daily temperatures in Celsius (C) ===");
  167.         dailyTemperatures.writeDailyStats(System.out, 'C');
  168.         System.out.println("=== Daily temperatures in Fahrenheit (F) ===");
  169.         dailyTemperatures.writeDailyStats(System.out, 'F');
  170.     }
  171. }
Add Comment
Please, Sign In to add comment