Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 3

Java8

08.10.2019, 00:15. Показов 449. Ответов 1

Студворк — интернет-сервис помощи студентам
Ребята, привет. Помогите пожалуйста, полный ноль в восьмой джаве. Надо переписать кусок-кровь-из-глаз-кода с помощью всяких опшнлов, мапов и т.д. Целй день читаю, пробую, практикуюсь, а реальную задачу решить не могу. Слабонервным код не смотреть. Архитектуру менять нельзя. Нужно вычеслить лимит.
  • Есть класс MainSettings, в котором лимит не бывает null. Во всех остальнным сущностях и Settings может быть null и конкретно limit может быть null.
  • Как вычеслить limit. Мы берем лимит у сущности World, если он есть проверям есть ли лимит у сущности Continent. Если есть то считаем по формуле (лимитWorld * лимитContinent)/100. Если у Continent нету лимита, тогда берем у Country (лимитWorld * лимитCountry)/100, если у Country нету, тогда берем у City. Если и у City нету тогда достаем лимит из MainSettings и считаем по формуле указанной выше. (лимитWorld * лимитMainSettings)/100
  • Это было описание в случае, когда у сущности World есть лимит. А если он там null, тогда мы берем лимит с Continent и умножаем на лимит Country (если есть). а если нету то на лимит City и т.д.

Помогите, пожалуйста, кто может сделать это по-человечески.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
public class World {
    private Continent continent;
    private Country country;
    private City city;
    private Settings settings;
 
    public World() {
        continent = new Continent();
        country  = new Country();
        city = new City();
    }
 
    public Continent getContinent() { return continent; }
    public Country getCountry() { return country; }
    public City getCity() { return city; }
    public Settings getSettings() { return settings; }
    public void setSettings(Settings settings) { this.settings = settings; }
}
 
class Continent {
    private Settings settings;
    public Settings getSettings() { return settings; }
    public void setSettings(Settings settings) { this.settings = settings; }
}
 
class Country {
    private Settings settings;
    public Settings getSettings() { return settings; }
    public void setSettings(Settings settings) { this.settings = settings; }
}
 
class City {
    private Settings settings;
    public Settings getSettings() { return settings; }
    public void setSettings(Settings settings) { this.settings = settings; }
}
 
class MainSettings {
    private Long limit = 500L;
    public Long getLimit() {
        return limit;
    }
}
 
 
 
public class Settings {
    private Long limit;
    public Settings(Long limit) {
        this.limit = limit;
    }
    public Long getLimit() {
        return limit;
    }
}
 
 
public class Runner {
    public static void main(String[] args) {}
 
    public  Long countLimit(World world, MainSettings mainSetting) {
        if (world.getSettings() != null && world.getSettings().getLimit() != null) {
            if (world.getContinent().getSettings() != null && world.getContinent().getSettings().getLimit() != null) {
                return count(world.getSettings().getLimit(), world.getContinent().getSettings().getLimit());
            } else if (world.getCountry().getSettings() != null && world.getCountry().getSettings().getLimit() != null) {
                return count(world.getSettings().getLimit(), world.getCountry().getSettings().getLimit());
            } else if (world.getCity().getSettings() != null && world.getCity().getSettings().getLimit() != null) {
                return count(world.getSettings().getLimit(), world.getCity().getSettings().getLimit());
            } else {
                return count(world.getSettings().getLimit(), mainSetting.getLimit());
            }
        } else if (world.getContinent().getSettings() != null && world.getContinent().getSettings().getLimit() != null) {
            if (world.getCountry().getSettings() != null && world.getCountry().getSettings().getLimit() != null) {
                return count(world.getContinent().getSettings().getLimit(), world.getCountry().getSettings().getLimit());
            } else if (world.getCity().getSettings() != null && world.getCity().getSettings().getLimit() != null) {
                return count(world.getContinent().getSettings().getLimit(), world.getCity().getSettings().getLimit());
            } else {
                return count(world.getContinent().getSettings().getLimit(), mainSetting.getLimit());
            }
        } else if (world.getCountry().getSettings() != null && world.getCountry().getSettings().getLimit() != null) {
            if (world.getCity().getSettings() != null && world.getCity().getSettings().getLimit() != null) {
                return count(world.getCountry().getSettings().getLimit(), world.getCity().getSettings().getLimit());
            } else {
                return count(world.getCountry().getSettings().getLimit(), mainSetting.getLimit());
            }
        } else if (world.getCity().getSettings() != null && world.getCity().getSettings().getLimit() != null) {
            return count(world.getCity().getSettings().getLimit(), mainSetting.getLimit());
        }
        return mainSetting.getLimit();
    }
 
    private Long count(Long setting1, Long setting2) {
        return setting1 * setting2 / 100;
    }
}

Должно проходить тесты:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import org.junit.jupiter.api.Test;
 
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
 
public class RunnerTest {
 
    @Test
    public void shouldCountLimitWhenNoneAnySetting() {
        World world = new World();
        MainSettings mainSettings = new MainSettings();
        Runner runner = new Runner();
        assertThat(runner.countLimit(world, mainSettings), equalTo(500L));
    }
 
    @Test
    public void shouldCountLimitWhitCountrySettingPresent() {
        World world = new World();
        Settings settingsCountry = new Settings(300L);
        world.getCountry().setSettings(settingsCountry);
        MainSettings mainSettings = new MainSettings();
        Runner runner = new Runner();
        assertThat(runner.countLimit(world, mainSettings), equalTo(1500L));
    }
 
    @Test
    public void shouldCountLimit(){
        World world = new World();
        Settings settings = new Settings(200L);
        world.setSettings(settings);
        world.getCity().setSettings(settings);
        MainSettings mainSettings = new MainSettings();
        Runner runner = new Runner();
        assertThat(runner.countLimit(world, mainSettings), equalTo(400L));
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2019, 00:15
Ответы с готовыми решениями:

Java8 groupingBy
Допустим есть мапа Map<String, String> field1_ru_RU -> "field1_value_for_ru_RU" field1_en_US -> "field1_value_for_en_US" field2_ru_RU...

Чтение из текстового файла строковых данных в двумерный массив java8
Собственно как это сделать? Scanner использовать или reader или что? Использовать List<List<Double>> matr = new...

Android studio и java8 (гугл не помог)
Вобщем, никак не хочет определять java, путь в ручную указывал, переменную среды создавал(по совету гугла) всё равно не видит. Что делать и...

1
 Аватар для Мимино
191 / 161 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
08.10.2019, 13:21
Как я понял из тестов, если вообще лимитов нигде нет, нужно возвращать лимит из MainSettings.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public  Long countLimit(World world, MainSettings mainSetting) {
        List<Settings> settings = new ArrayList<>();
 
        settings.add(world.getSettings());
        settings.add(world.getContinent().getSettings());
        settings.add(world.getCountry().getSettings());
        settings.add(world.getCity().getSettings());
 
        List<Long> limits = settings.stream()
                                    .filter(Objects::nonNull)
                                    .map(Settings::getLimit)
                                    .collect(Collectors.toList());
 
        limits.add(mainSetting.getLimit());
 
        if (limits.size() > 1) {
            return count(limits.get(0), limits.get(1));
        }
 
        return mainSetting.getLimit();
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2019, 13:21
Помогаю со студенческими работами здесь

Java8, Hibernate5, MySQL, IdClass, ManyToOne, EntityExistsException - Halp!
Добрый день! Пытаюсь настроить связь приложения с базой данных, а именно: есть две сущности, связанные между собой как ManyToOne по...

HTTP Status 500 - Unable to compile class for JSP Java8, Tomcat8.5
У меня есть главный файл jsp, который я пытаюсь загрузить на localhost'e. В нем используется статический метод класса B из пакета boxers....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru