Conversation
| if(f.getFileName().equals(file)) { | ||
| System.out.println(f); | ||
| return; | ||
|
|
| @@ -0,0 +1,5 @@ | |||
| package com.walking.lesson20_exceptions.task1_catchException.model; | |||
|
|
|||
| public enum TypeInformation { | |||
| seachFile(file, files); | ||
| } | ||
|
|
||
| private static void seachFile (String file, File [] files) { |
There was a problem hiding this comment.
Формально задача решена. Но я рекомендую уделять больше внимания декомпозиции и проектировать решения с использованием классов. Это будет полезно вне зависимости от изучаемой темы
Так, со временем станет понятно, что void-методы - не всегда хорошее решение. И метод с названием seachFile() по своей логике должен возвращать найденный объект типа File:)
В целом, советую иногда фантазировать - насколько тяжело будет переиспользовать решение, если изменится формат ввода (скажем, вместо консоли - обработчик нажатия на кнопку в графическом интерфейсе) или вывода (скажем, не в консоль, а в файл)
|
lesson26 task2 неправильное решение |
| @@ -0,0 +1,7 @@ | |||
| package com.walking.lesson28_generics1.task4.exception; | |||
|
|
|||
| public class ElementDoesNotExist extends RuntimeException{ | |||
| @@ -0,0 +1,7 @@ | |||
| package com.walking.lesson28_generics1.task4.exception; | |||
|
|
|||
| public class ElementNotFoundException extends RuntimeException{ | |||
| import java.util.Objects; | ||
|
|
||
| public class Stack<T> { | ||
| private final Object[] stack; |
There was a problem hiding this comment.
все же, хотелось бы видеть структуру на базе связанного списка. С массивом не так интересно
There was a problem hiding this comment.
и не позволяет в полной мере поработать именно с дженериками - при извлечении все сводится к касту
|
|
||
| public void push(T item) { | ||
| if (tos == stack.length - 1) { | ||
| System.out.println("Стек полон"); |
There was a problem hiding this comment.
у стека особо нет ограничений по длине:) логичнее после этой строки вставить return (или заменить принт в консоль на эксепшн, что более оправдано) и код ниже писать без else
| public Object pop() { | ||
| if (tos < 0) { | ||
| throw new ElementDoesNotExist("Елемент не существует."); | ||
| } else { |
There was a problem hiding this comment.
else избыточен. Если зашло в иф с return/throw, в следующие блоки в любом случае не зайдет
| } | ||
| } | ||
|
|
||
| public Object getValue(T value) { |
There was a problem hiding this comment.
и метод логичнее назвать аля find
|
|
||
| public class Stack<T> { | ||
| private final Object[] stack; | ||
| private int tos; |
There was a problem hiding this comment.
название должно быть осмысленно
|
|
||
| @Override | ||
| public boolean equals(Object o) { | ||
| if (this == o) return true; |
| private static TreeMap<Integer, Car> initCars() { | ||
| TreeMap<Integer, Car> cars = new TreeMap<>(); | ||
|
|
||
| cars.put(1, new Car("RRR-111-XX", 2021, "red", true)); |
There was a problem hiding this comment.
кажется, ты не разобрался, зачем нужен ключ у Map
| public class CarService { | ||
| private final TreeMap<Integer, Car> carService; | ||
|
|
||
| public CarService(TreeMap<Integer, Car> carService) { |
There was a problem hiding this comment.
параметр - явно не carService
| public String findCar(Car car) { | ||
| for (Car c : carService.values()) { | ||
| if (c.equals(car)) { | ||
| return c.toString(); |
There was a problem hiding this comment.
почему строку-то возвращаем?) с ней явно не получится работать дальше как с машиной
|
|
||
| public class Philosopher extends Thread { | ||
| private final String name; | ||
| private final Semaphore semaphore; |
There was a problem hiding this comment.
Некорректно с точки зрения дизайна - семафор, выступающий посредником, не является ни частью философа, как сущности, ни частью логики философа. Это не значит, что так делать в принципе нельзя, но риск проблем при таком решении достаточно высок при любом дальнейшем развитии решения
| public static void main(String[] args) { | ||
| Semaphore semaphore = new Semaphore(5); | ||
|
|
||
| for (int i = 1; i < 6; i++) { |
There was a problem hiding this comment.
традиционно циклы нумеруются от 0, если нет явной необходимости в ином. Учитывая, что здесь число обозначает порядковый номер философа - подход имеет смысл, но я бы советовал в таком случае ограничить цикл по <= 5 - в таком случае будет понятнее, что это за числа и к чему они привязаны
| private final Semaphore semaphore; | ||
|
|
||
| private final int id; | ||
| private int num = 0; |
There was a problem hiding this comment.
0 - значение по умолчанию для числового поля
| private int num = 0; | ||
|
|
||
| public Philosopher(String name, Semaphore semaphore, int id) { | ||
| this.name = name; |
There was a problem hiding this comment.
избыточное поле. Могло бы иметь смысл, не будет у философа числового айди
| semaphore.acquire(2); | ||
| System.out.printf("%s %d садится за стол.\n", name, id); | ||
|
|
||
| takeLeftFork(); |
There was a problem hiding this comment.
наверно, основной недостаток твоего решения - ты никаким образом не формулируешь сущность "вилка". Т.е. это некая абстракция, которая не имеет воплощения. Но при этом вилка - это четко опрделенный разделяемый ресурс.
Из-за этого допущения, как вижу, вполне возможна ситуация, в которой у тебя будут есть два соседних философа одновременно, несмотря на то, что у них на двоих в доступе лишь 3 вилки из требуемых 4: слева от философа1, справа от философа1(==слева от философа2) и справа от философа2
| semaphore.release(2); | ||
|
|
||
| sleep(500); | ||
| System.out.printf("%s %d размышляет.\n", name, id); |
There was a problem hiding this comment.
чутка нелогично - ты выводишь это в консоль к моменту окончания размышлений:)
No description provided.