Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Comparator;
- import java.util.Scanner;
- import java.util.stream.IntStream;
- /**
- * I partial exam 2016
- */
- class Temperature {
- public final char FAHRENHEIT = 'F';
- public final char CELSIUS = 'C';
- char type;
- double temperature;
- public Temperature(char type, double temperature) {
- this.type = type;
- this.temperature = temperature;
- }
- }
- class DailyTemperature implements Comparable<DailyTemperature> {
- public final static char FAHRENHEIT = 'F';
- public final static char CELSIUS = 'C';
- char type;
- int day;
- ArrayList<Double> temperatures;
- public DailyTemperature(char type, int day, double numbers[]) {
- this.type = type;
- this.day = day;
- this.temperatures = new ArrayList<>();
- /* Keep all temperatures here in CELSIUS */
- if (type == CELSIUS) {
- for (int i = 0; i < numbers.length; i++) {
- this.temperatures.add(numbers[i]);
- }
- } else if (type == FAHRENHEIT) {
- for (int i = 0; i < numbers.length; i++) {
- this.temperatures.add(toCelsius(numbers[i]));
- }
- }
- //System.out.println(this);
- }
- public int getCount() {
- return temperatures.size();
- }
- public double min() {
- return temperatures.stream().min(Double::compare).get();
- }
- public double max() {
- return temperatures.stream().max(Double::compare).get();
- }
- public double sum() {
- return temperatures.stream().mapToDouble(Double::doubleValue).sum();
- }
- public double average() {
- return sum() / temperatures.size();
- }
- public double toCelsius(double Fahrenheit) {
- return ((Fahrenheit - 32) * 5) / 9;
- }
- public double toFahrenheit(double Celsius) {
- return ((Celsius * 9) / 5) + 32;
- }
- public String toStringCelsius() {
- return String.format("%3d: Count: %3d Min: %6.2fC Max: %6.2fC Avg: %6.2fC",
- day, getCount(), min(), max(), average());
- }
- public String toStringFahrenheit() {
- return String.format("%3d: Count: %3d Min: %6.2fF Max: %6.2fF Avg: %6.2fF",
- day, getCount(), toFahrenheit(min()), toFahrenheit(max()), toFahrenheit(average()));
- }
- @Override
- public String toString() {
- return "DailyTemperature{" +
- "type=" + type +
- ", day=" + day +
- ", temperatures=" + temperatures +
- '}';
- }
- @Override
- public int compareTo(DailyTemperature that) {
- if (this.day < that.day) return -1;
- else if (this.day > that.day) return 1;
- return 0;
- }
- }
- class DailyTemperatures {
- ArrayList<DailyTemperature> dailyTemperatures;
- public DailyTemperatures() {
- this.dailyTemperatures = new ArrayList<>();
- }
- public void readTemperatures(InputStream inputStream) {
- Scanner input = new Scanner(inputStream);
- while (input.hasNextLine()) {
- int day = input.nextInt();
- String line = input.nextLine();
- String parts[] = line.split(" ");
- parts = Arrays.copyOfRange(parts, 1, parts.length);
- char type = parts[0].toCharArray()[parts[0].length() - 1];
- double numbers[] = new double[parts.length];
- for (int i = 0; i < parts.length; i++) {
- if (type == DailyTemperature.FAHRENHEIT) {
- numbers[i] = Double.parseDouble(parts[i].replace("F", ""));
- } else if (type == DailyTemperature.CELSIUS) {
- numbers[i] = Double.parseDouble(parts[i].replace("C", ""));
- }
- }
- /*
- System.out.println(day);
- System.out.println(Arrays.toString(parts));
- System.out.println(type);
- System.out.println(Arrays.toString(numbers));
- */
- dailyTemperatures.add(new DailyTemperature(type, day, numbers));
- }
- }
- public void writeDailyStats(OutputStream outputStream, char scale) {
- dailyTemperatures.sort(DailyTemperature::compareTo);
- PrintWriter pw = new PrintWriter(outputStream);
- if (scale == DailyTemperature.CELSIUS) {
- for (int i = 0; i < dailyTemperatures.size(); i++) {
- pw.println(dailyTemperatures.get(i).toStringCelsius());
- }
- } else if (scale == DailyTemperature.FAHRENHEIT) {
- for (int i = 0; i < dailyTemperatures.size(); i++) {
- pw.println(dailyTemperatures.get(i).toStringFahrenheit());
- }
- }
- pw.flush();
- }
- }
- public class DailyTemperatureTest {
- public static void main(String[] args) {
- DailyTemperatures dailyTemperatures = new DailyTemperatures();
- dailyTemperatures.readTemperatures(System.in);
- System.out.println("=== Daily temperatures in Celsius (C) ===");
- dailyTemperatures.writeDailyStats(System.out, 'C');
- System.out.println("=== Daily temperatures in Fahrenheit (F) ===");
- dailyTemperatures.writeDailyStats(System.out, 'F');
- }
- }
Add Comment
Please, Sign In to add comment