Programmers world

Konkurs Javeloper 2021

W ramach Javeloper 2021 zapraszamy Was do udziału w konkursie. Na zwycięzców czekają nagrody! Nagroda główna to okulary VR Oculus oraz 5 zestawów niespodzianek z gadżetami firmowymi. Prosimy o przesyłanie odpowiedzi do 30 września do godz. 12:00. Szczegóły znajdziecie poniżej.

Wykaż które elementy w kodzie są do poprawy. Zaproponuj swoje zmiany.

Ten kod w ogóle nie kompiluje (nie działa) i posiada sporo błędów, więc należy je skrupulatnie wskazać i poprawić:

package com.example.wather;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

interface WeatherConnector {
    String[] weather(String location);
}
interface MailProvider {
    void sendMail(final String location, final String weatherDatum, final String datum);
}
public class WeatherApp {

    static final String[] locations = new String[]{"Cracow", "Warsaw", "London", "Lodz", "Kielce", "Tokyo", "NewYork", "Buenos Aires", "Rzeszow"};

    public static void main(String[] args) throws InterruptedException {

        Random random = new Random();

        Runnable task = () -> {
            WeatherProviderUtilsCommonHelper provider = new WeatherProviderUtilsCommonHelper();

            String location = locations[random.nextInt()];
            
            log(location);
            
            Weather weather = provider.checkWeatherAndSendMailWithTemperature(location);

            log(weather);
        };

        for (int i = 0; i < locations.length * 20 ; i++) {
            new Thread(task).join();
        }
    }

    private static void log(Object object) {
        System.out.println("Weather=" + object.toString());
    }

    private static void log(String text) {
        System.out.println("Weather=" + text);
    }
}

class WeatherProviderUtilsCommonHelper {
    private WeatherConnector weatherConnector;
    private MailProvider mailProvider;
    private Map<String, Weather> cacheWeather = new HashMap<>();

    public Weather checkWeatherAndSendMailWithTemperature(String location) {

        try {
            String[] weatherData = weatherConnector.weather(location);

            Weather weather = new Weather(weatherData[0], Double.valueOf(weatherData[1]));

            cacheWeather.put(location, weather);

            mailProvider.sendMail(location, weatherData[0], weatherData[1]);

            return weather;
        } catch (Exception e) {
            log(e);
            return null;
        }
    }

    public void setWeatherConnector(WeatherConnector connector) {
        this.weatherConnector = connector;
    }

    private static void log(Object object) {
        System.out.println("Weather=" + object.toString());
    }

    private static void log(String text) {
        System.out.println("Weather=" + text);
    }
}

class Weather {
    private String location;
    private double temp;
}

Formularz konkursowy

    x
    Maksymalna wielkość pliku wynosi 3MB. Akceptowane formaty to: pdf, doc, docx.
    Administratorem Twoich danych jest Ailleron S.A. z siedzibą w Krakowie, ul. prof. M. Życzkowskiego 20, 31-864 Kraków, nr KRS: 0000385276. Dane będą przetwarzane w celu organizacji konkursu, a jeżeli wyrazisz osobną zgodę - w celu wskazanym w tej zgodzie. Dane przetwarzane będą przez okres nie dłuższy niż 3 lata od dnia udzielenia zgody. Przysługuje Cie prawo dostępu do danych, otrzymania ich kopii, sprostowania, usunięcia lub żądania ograniczenia ich przetwarzania, a także do wycofania zgody w każdym czasie - z praw skorzystasz wysyłając e-mail na adres dane.osobowe@ailleron.com. Pełna treść informacji o przetwarzaniu danych znajduje się na stronie Polityki Prywatności.
    Wyraź zgodę na kontakt marketingowy Wyrażam dobrowolną zgodę na przetwarzanie danych osobowych podanych przeze mnie przez Ailleron S.A. z siedzibą w Krakowie oraz przez inne podmioty z grupy Ailleron – do celów marketingowych, w tym do budowania pozytywnej relacji z Ailleron. Akceptuję, że niektóre z narzędzi służących do celów marketingowych mogą wymagać przesłania danych poza Europejski Obszar Gospodarczy. Kontakt w celach marketingowych może odbywać się za pomocą:
    Strona jest chroniona przez Google reCAPTCHA v3. Więcej informacji o Google reCAPTCHA znajduje się w polityce prywatności i warunkach świadczenia usług.

     

    rodo – Załącznik nr 1