• Как автоматически обновлять столбец второй таблицы если тот же столбец обновляется в первой таблице?

    @d-stream
    Готовые решения - не подаю, но...
    С точки зрения нормальных форм - "это ненормально"
    Но уж если так есть - то видимо костылить триггером. Либо бить ногами аффтора и приводить к человеческому виду.
    Хотя подозреваю что это мельчайшая проблема из тех что там выявятся.
    Ответ написан
    4 комментария
  • Как посчитать сумму по нескольким запросом?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Первый и второй запрос относятся к одной таблице, но имеют разные условия
    Тогда нужно использовать конструкцию:
    SELECT…
      FROM R_PERS_ACCOUNT PA1
       JOIN R_PERS_ACCOUNT PA2
        ON PA2.PA.R_PERS_ACCOUNT_ID = PA1.PA.R_PERS_ACCOUNT_ID
    …
      WHERE OP1.M_OPERATION_TYPE_ID = 1 AND OP2.M_OPERATION_TYPE_ID = 2
    Ответ написан
    Комментировать
  • Покидайте примеры проектов с использованием на jframe(swing, awt)?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    По моему, ни здесь никакие swing-awt-javafx вообще не нужны!
    Делается стандартное (spa?) frontend приложение на javascript, typescript, react, vue, angular (далее везде) :)))
    В качестве backend можно и spring использовать или vertx. А можно и nodejs, ruby, php, python, go.... :)
    Врачу - браузер и урл, куда ходить.
    Если же на яве хотите, смотрите на wicklets.
    Около явы: clojure/clojuresctipt (и фронт и бек), groovy, scala...
    Всякие чатики приделываются рядом отдельными приложениями, их сотни, от rabbitmq, до mosqute.
    Ответ написан
    Комментировать
  • Как с консоли считывать поисковый запрос, и выводить результат поиска по Википедии?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Срочно читайте про try-with-resources!

    Ваша задача должна состоять из таких вот методов:
    // Считать запрос
    String request = getRequest();
    
    // Сделать запрос к серверу
    String response = getResponseFromWiki(request);
    
    // Распарсить ответ
    (?) result = parseResponse(response);
    
    // Вывести результат
    showResult(result);

    С запросом к серверу вы, видимо, справились.
    Нужно это все сделать отдельным методом (типа getResponseFromWiki), который будет возвращать полученную строку (или что там у вас вернется)
    Ну и дальше по схеме.
    Ответ написан
  • Как сделать код в стиле MVC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    public class Knight {
        private Ammunition[] ammunition;

    Наверное, вместо массива есть смысл использовать что-нибудь из jcf. Например, List.

    Что такое MVC - model, view, controller

    Controller
    Создайте несколько контроллеров. Например. MenuController, внутри которого будут методы выводящие меню и другие методы для работы с меню

    throw new UnsupportedOperationException("You need to implement this method");

    Если вы хотите, чтобы пользователь имплементировал данный метод, то вместо выбрасывания исключения можно использовать абстрактный класс, а тело метода оставить пустым. Ну или же использовать интерфейс.

    Model
    В данном случае у вас есть необходимые модели (сущности). Например, Knight, Ammunition

    View
    Ну тут уже можно например, для красоты подключить либу AsciiTable и выводить элементы меню в виде красивой таблицы или например, добавить прогресс бар в консольное приложение и т.д.
    Ответ написан
    3 комментария
  • В массиве слов найти слово состоящее только из цифр. Если таких слов несколько, найти второе из них?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В массиве слов найти слова состоящие только из цифр.

    Вот, одно из возможных решений задачи:
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            String[] words = new String[]{"qqqqqqqqqqwe", "qwer", "123", "4321"};
            char a = 'a';
            StringProcessor stringProcessor = new StringProcessor();
            List<String> wordsContainingOnlyDigits = stringProcessor.findWordsContainingDigits(words);
            wordsContainingOnlyDigits.forEach(System.out::println);
        }
    
    }
    
    class StringProcessor {
    
        /**
         * Метод находит слова, которые состоят только из цифр
         * @param words массив слов
         * @return список слов, состоящих из цифр
         */
        public List<String> findWordsContainingDigits(String[] words) {
            List<String> wordsContainingOnlyDigits = new ArrayList<>();
            // Итерируем по массиву слов
            for (String word : words) {
                // получаем массив символов из слова
                char[] wordChars = word.toCharArray();
                // Boolean[] isDigits = new Boolean[wordChars.length];
                boolean[] isDigits = new boolean[wordChars.length];
                // итерируем по массиву символов
                for (int i = 0; i < wordChars.length; i++) {
                    char currentChar = wordChars[i];
                    // проверяем является ли символ цифрой
                    if (Character.isDigit(currentChar)) {
                        isDigits[i] = true;
                    } else {
                        // если нет, то проверяем следующее слово
                        break;
                    }
                }
                // если все значения isDigits true, то значит слово состоит из цифр
                if (areAllTrue(isDigits)) {
                    // добавляем слово в список
                    wordsContainingOnlyDigits.add(word);
                }
            }
            return wordsContainingOnlyDigits;
        }
    
        /**
         * Метод проверяет boolean массив на истинность
         * @param array boolean массив
         * @return boolean
         */
        private static boolean areAllTrue(boolean[] array)
        {
            for(boolean b : array) if(!b) return false;
            return true;
        }
    }


    Если таких слов несколько, найти второе из них?

    Не совсем понятно, что является "вторым из них".

    Что касается вашего кода, то:
    зачем конвертировать строку в строку и затем доставать массив символов
    char[] chars = String.valueOf(element).toCharArray();

    можно же:
    char[] chars = element.toCharArray();

    тут итерция неверная:
    for (int i = 0; i < chars.length - 1; i++) {
    либо так: i < chars.length; либо так: i <= chars.length - 1;

    для проверки является ли символ цифрой есть метод Character.isDigit()
    Ответ написан
    5 комментариев
  • Как написать калькулятор в стиле ООП?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Изучите шаблон builder - https://habr.com/ru/post/244521/
    Изучите шаблон chain of responsibility и command https://habr.com/ru/post/538954/
    Совместите все вместе и получите калькулятор.
    Ответ написан
  • Как сделать корректную логику в данном коде?

    @Arty_Fact
    Подработаю немного телепатом.
    В changeEmployee() ты добавляешь Employee employee, который не определен. Из-за этого у тебя не компилируется проект. Тебе нужно его туда как-то передать, но твой searchBySurname() возвращает только код. И ни о каком
    employee.setLastname(scanner.next());
    employee.setName(scanner.next());
    не может быть и речи - у тебя просто нет employee.

    В searchBySurname() ты пытаешься проверить на соответствие коллекцию к строке:
    if (list.equals(name) || list.equals(lastname))
    Так работать не будет, что логично. Более того, твой метод называется searchBySurname, но ты туда передаешь и имя, и даже пытаешься на него проверять.

    То есть у тебя проблема в самой идее. Надо определиться что ты хочешь. Возможно, searchBySurname будет возвращать индекс первого попадания employee и ты будешь получать его из твоего листа, предлагая изменять его. Возможно, поиск будет генировать мапу всех однофамильцев и их индексов, чтобы дать пользователю вариант выбрать в changeEmployee().
    В зависимости от твоего решения, надо будет полностью переписать searchBySurname, чтобы он прохдил по твоему листу, и changeEmployee, чтобы он мог изменять employee.
    Ответ написан
    Комментировать
  • Как дублировать буквы в строке?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Можно по-разному реализовать. Например, использовать стримы (как отметил коллега Dmitry Roo) или например, использовать метод repeat()

    Scanner scanner = new Scanner(System.in);
            System.out.println("Введите слово\n");
            String word = scanner.nextLine();
            String[] splittedWord = word.split("");
            for (String character : splittedWord) {
                System.out.print(character.repeat(3));
            }
    Ответ написан
    5 комментариев
  • Как дублировать буквы в строке?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    var multiplied = Arrays.stream("Important".split(""))
                    .flatMap(s -> Stream.of(s, s, s))
                    .collect(Collectors.joining());
    Ответ написан
    1 комментарий
  • Проверить встречается ли строка больше одного раза?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день. Давным-давно писал аналогичный учебный проект про приобретению билета для кино.
    Правда, я тогда уже использовал Hibernate + MySQL.
    Вот, тут можно глянуть исходники - https://github.com/hasanli-orkhan/learn-java/tree/...

    Скажу, что ваш код реализован некорректно.
    Во-первых, Java это ООП язык и соответственно, вам нужно использовать всю мощь ООП. Например, создайте pojo Ticket, у каждого билета своя стоимость, а также булево значение isPurchased и т.д. В общем, гляньте на исходник моего проекта станет ясно.

    Такой вариант плох тем, что во-первых это скорее процедурный подход, нежели ООП. Во-вторых, представьте, что у вас завтра изменится стоимость билетов и вам нужно править код в нескольких местах. А завтра заказчик скажет, что валюта не в долларах, а в рублях и вам придется заново править код и т.д.
    так не должно быть
    public static void ticketPrice(int rows, int seats, int checkRow) {
            System.out.println();
            if (rows * seats <= 60) {
                System.out.println("Ticket price: $10");
            } else {
                if (rows % 2 == 0) {
                    if (checkRow <= rows / 2) {
                        System.out.println("Ticket price: $10");
                    } else {
                        System.out.println("Ticket price: $8");
                    }
                } else {
                    if (checkRow <= rows / 2) {
                        System.out.println("Ticket price: $10");
                    } else {
                        System.out.println("Ticket price: $8");
                    }
                }
            }
        }


    Далее если вы оперируете валютой, то лучше использовать BigDecimal, вместо double.

    Разделите ваш код на объекты. Например, Cinema, Ticket, Session и др. Далее создайте сервисные классы, в которых будут методы по добавлению фильма, по приобретению билетов и т.д.
    Ответ написан
    5 комментариев
  • Нужно проверить содержит ли поля со значением null или 0, если содержит то выбросить исключение RuntimeException?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    event.equals(null)
    Это бессмысленный код. Либо можно вызвать метод, и тогда event не null, либо случится NullPointerException. На null надо сравнивать по ==.
    event == null
    Ответ написан
    4 комментария
  • Как сделать валидацию пользователя?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Не надо так вообще делать. Нельзя строить бизнес-логику на исключениях. Выбрасывание исключения - это очень дорогая операция. И поэтому она должна быть исключительной, то есть не нормальной для работы программы.

    Метод валидации должен возвращать код ошибки валидации (в простейшем случае - true/false, в более сложном - enum { OK, AGE_DENIED, PERMISSION_DENIED, ....}, в сложном - объект с дополнительными полями(в джаву как раз sealed class'ы завезли).
    Выше по стеку(в твоём случае - в main) должна быть проверка и уже реакция, принты и тд. Сам метод валидации не должен ничего печатать.

    Не надо хранить ничего вот в статике. Это дурной тон, и неудобно. Максимально быстро уходи от статики как-то так:
    class App {
        public static void main (args){
             new App(args).run();
        }
    
        private  void run(args) { 
              //.... твой код
        }
    }
    Ответ написан
    3 комментария
  • Как сделать валидацию пользователя?

    @gsaw
    Непонятный вопрос конечно, но наверное так

    try {
        validateUser()
        System.out.println("Проходите")
    } catch( AccessDeniedException e) {
        System.out.println("Не положено!")
    }
    Ответ написан
    6 комментариев
  • Как выбросить IllegalArgumentException, если значение slot некорректно?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Условно говоря, вам нужно проверить не является ли переданное методу shotWithWeapon() значение slot меньше 0. Используйте конструкцию if. Дальше было бы неплохо узнать, каким типом данных является Slot. Например, если это массив, то нужно проверить входит ли переданное значение в массив значений. Ну а дальше внутри конструкции

    public void shotWithWeapon(int slot)  {
    if (slot < 0 || другие условия) {
    throw new IllegalArgumentException();
    }
            //TODO проверить на выход за границы
            // Проверить на выход за границы
            // Выбросить IllegalArgumentException, если значение slot некорректно
    
            Weapon weapon = weaponSlots[slot];
            weapon.shot();
        }
    Ответ написан
    Комментировать
  • Необходимо разработать иерархию работников библиотеки?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Создайте несколько интерфейсов.
    Например, iReader, iLibrarian, iSupplier и iAdministrator. (Названия даны лишь для наглядности. Желательно придерживаться Java naming convention)

    Далее для каждого интерфейса опишите методы.
    Например, для iReader -
    // сигнатуры методов могут отличаться
    takeBook(); // взять книгу
    returnBook(); // вернуть книгу


    Для iLibrarian
    orderBook(); // заказать книгу

    Для iSupplier
    bringBook(); // принести книгу

    Для iAdministrator
    findBook(); // найти книгу
    overdueNotification(User reader); // уведомить о времени возврата


    Дальше вам нужны реализации этих интерфейсов.
    Reader implements iReader
    Librarian implements iLibrarian
    Supplier implements iSupplier
    Admin implements iAdministrator


    В общем, имплементируем интерфейсы и реализуем эти интерфейсы.

    Если например, Admin может не только уведомлять пользователей об истечении срока возврата, но также читать книги, то Admin implements iAdministrator, iReader имплементируем нужный интерфейс тоже.

    Ну и конечно же нужен класс Book, который будет представлять книгу.

    Это простая задача на ООП. Возможно. что названия классов и интерфейсов можно оформить еще красивее, но я на скорую руку сделал, чтобы показать вам саму идею.

    Также можно например, Всех этих юзеров наследовать от объекта User.
    Т.е.
    Reader extends User implements iReader

    А в интерфейсах например, использовать generic type. Таким образом реализовать этот интерфейс смогут только классы расширяющие класс User.

    Например,
    interface iReader<T extends User>

    Тогда указанная выше строка будет выглядеть следующим образом:
    Reader extends User implements iReader<Reader>
    Ответ написан
    8 комментариев