Ответы пользователя по тегу Java
  • Main не видит другие классы. Что добавить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну во-первых, зачем вызывать статичный метод sendMsg() через экземпляр класса Jsoner? Вы можете обратиться к методу напрямую через Jsoner.sendMsg()
    Во-вторых,
    location: package неважно
    Важно. Так как название пакета должно соответствовать naming convention. Рекомендую открыть этот проект в Intellij IDEA и скорее всего она будет ругаться. Вполне возможно, что в названии директории есть недопустимые символы (например, тире или дефис).
    В-третьих,
    java -cp "$(printf %s: lib/*.jar)" ./src/неважно/Main.java

    Вот, ответ на ваш вопрос - https://stackoverflow.com/questions/219585/includi...
    Ответ написан
  • Какие лучшие курсы java 2021?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Скажу так: курсы нужны не для того, чтобы получать новые знания, а для того, чтобы более опытный разработчик мог указать вам на ваши ошибки. Также курсы полезны тем, что когда вы изучаете сами, то это может быть не систематично, другое дело, если вам приходится 2-3 раза в неделю посещать курсы (онлайн или оффлайн - не важно).
    Соответственно, можно даже не проходить курсы, а найти ментора (есть даже платные услуги менторов). За основу берите:
    1) учебники
    2) полезные статьи на habr, baeldung, medium и др
    3) туториалы на youtube, udemy, coursera и т.д. ( не бросайтесь тапками =) ). Это помогает быстро освоить что-либо, увидеть в работе фреймворк или еще что, но для получения академических знаний (см. пункт 1)
    Ответ написан
  • Консольная игра в Кости, как реализовать возможность выбора между выходом из игры и ее продолжением?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Внутри метода создается цикл while(), внутри которого слушаете ввод (Scanner) и если была введена нужная команда, то делаете System.exit(n)
    Ну и не забывайте обработать исключения, чтобы например, приложение не выходило на неправильной или несуществующей команде
    Ответ написан
  • Как подсчитать письма с помощью Selenium/Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну ответ на ваш вопрос может сильно отличаться от почтового провайдера к почтовому провайдеру, ибо у них разный DOM и соответственно, будут нужны разные селекторы (xpath).
    Если простыми словами, то:
    - открыть браузер (можно в headless режиме)
    - найти узел, в котором представлен список писем
    - выбрать этот узел. В Selenium есть такой класс, как WebElement. Так как элементов несколько, то используйте List<WebElement>.
    - Так как у нас есть List вызываем метод size() и получаем кол-во элементов помещенных в список.

    И как правильно отметил коллега rst надо заставить подождать загрузки страницы. Прочитайте про Explicit & Implicit Waits
    Ответ написан
    Комментировать
  • Как сделать код в стиле 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 комментария
  • Что нужно изучить чтобы писать красивые приложения под Android?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    что нужно изучить чтобы писать красивые UI-приложения?

    Ну с учетом того, что художник пишет свои картины, то вам нужно изучить UX/UI дизайн.

    Но если все-таки желаете разрабатывать приложения для Android, то начать изучение стоит с Kotlin / Java. А затем прочитать про Gradle. Потом познакомиться с Android. А вопрос насчет UI оставить дизайнеру. Пускай, у него голова болит, как надо красиво нарисовать кнопочки, ибо ваше дело разработка))
    Ответ написан
    Комментировать
  • Как правильно отпарсить веб-страницу через Jsoup?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как и отметил коллега Сергей Горностаев контент данной страницы формируется динамически. Соответственно, jsoup не подойдет.
    Вам необходимо выполнить GET запрос на урл REST сервиса и получить json, который потом необходимо будет распарсить.
    Откройте консоль браузера и перейдите на вкладку "Сеть". В фильтрах выберите XHR и изучите запросы.
    Увидете вот, такой урл:
    https://www.stoloto.ru/p/api/mobile/api/v34/service/draws/archive?count=10&game=keno2

    А в ответ прибегает json с веткой draws.

    При помощи либы или онлайн сервиса json2pojo создайте pojo и используя (gson, DomParser или jackson) спарсите этот json.

    jsoup тут не нужен.
    Можно еще спарсить страницу при помощи selenium (управляя браузером), но как по мне это плохое решение.
    Ответ написан
    Комментировать
  • Что лучше выучить, Java или C#?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Язык является инструментом. Важны ваши навыки, как разработчика (алгоритмы, структуры данных, понимание tcp/ip и т.д.)
    Что касается выбора языка, то ориентируйтесь на:
    - что вы собираетесь на нем делать и кем планируете работать. Если например, речь о геймдеве, то конечно же C# (Unity) или C++. И тут Java ну никак... хоть и позволяет писать игры. Если enterprise, то да, тут уже можно выбирать между Java & C#.
    - ориентируйтесь на то, где вы планируете работать. Возможно, что вы в результате вашего исследования поймете, что Java популярнее C# (или наоборот), но на деле окажется, что в вашей стране/городе она вовсе не популярна. Соответственно, посмотрите какие компании есть у вас в городе (если планируете работать офлайн) и изучите их стек.
    Ну и конечно же пробуйте. Я например, пока дошел до Java, успел попробовать PHP & JavaScript. В любом случае, когда вы станете востребованным и опытным специалистом, то уже будете владеть несоклькими языками.
    Ответ написан
    Комментировать
  • Почему у строк всегда одиноковый hashcode()?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вот, ответ на ваш вопрос:
    https://www.baeldung.com/java-string-immutable
    Why_String_Is_Immutable_In_Java.jpg
    Ответ написан
  • В массиве слов найти слово состоящее только из цифр. Если таких слов несколько, найти второе из них?

    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 комментариев
  • Можно ли сделать динамическое добавление WebAPI?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Не знаю поможет ли вам это, но нужный вам функционал есть в составе Spring Cloud.
    Вам нужно следующее:
    - Spring Configuration Server, который стартует первым и подгружает конфигурации для других микросервисов.
    - (Разумеется, что вам также понадобятся Eureka Server & Spring Gateway API)
    - Далее вам необходимо добавить Spring Cloud Bus, который динамически обновляет конфиги.
    Потом происходит примерно следующее:
    Вы заливаете ваши новые конфиги либо в гит репозиторий, либо локально. При наличии новой конфигурации они доставляются через AMQР к соответствующему микросервису.
    KHtD0FG.png
    Ответ написан
    Комментировать
  • CRUD spring+hibernate: передача json и обработка на сервере?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    По-первых, для реализации вашей задачи вам необходимо обратить внимание на паттерно DTO (data to object).
    Также, если у вас приложение на Spring, то можете подключить мапперы для удобства маппинга (конвертации) dto -> entity (и наоборот). Можете использовать такие либы, как modelMapper, MapStruct.
    Если не хотите использовать либу, то имплементируйте интерфейс Converter<S,T>

    Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются

    Вы можете на клиентской стороне средствами js проверить поля объекта на null и в случае оного просто не передавать это поле. Ну или же можно передать это поле и проверить на null & empty уже на серверной стороне.

    В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)

    Чтобы передать id животного/ных из фронта необходимо, чтобы они были в БД. Если животные добавляются раньше пользователя, то достаточно при получении dto для user (в утильном классе Converter) найти животных по переданным id и назанчить этих животных юзеру через setPets()или метод addPet()
    Ответ написан
    Комментировать
  • Как собрать с помощью maven ТОЛЬКО тесты?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Первое. что попадается на глаза - <pluginManagement>. Ваши плагины внутри этого тега. Этот тег позволяет управлять указанными плагинами внутри модулей, но если вы хотите, чтобы они были применены к текущему проекту, то вытащите плагины из этого плагина.
    В конфигах плагина maven-assembly-plugin пропишите это и укажите ваш класс
    <archive>
            <manifest>
              <mainClass>com.example.Main</mainClass>
            </manifest>
          </archive>


    А вообще, если хотите настроить fat jar, то лучше использовать - maven shade plugin
    https://stackoverflow.com/questions/16222748/build...
    Ответ написан
  • Как преобразовать строку в несколько чисел?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Используйте метод split() и разделите строку используя запятую. Получите массив подстрок, преобразуйте их в нужный формат (например, int) и все.
    Ответ написан
    Комментировать
  • Как сохранить страницу http на пк selenium java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как сохранить страницу http на пк selenium java?

    Мне кажется, что вы пошли не тем путем и притом извращенным путем.
    Во-первых, зачем вам для сохранения страницы запускать браузер, использовать selenium и т.д? Это затратно в плане времени и в плане памяти.
    Можно выполнить get запрос на сервер и получить массив байтов самой страницы, сохранить ее.
    www.java2s.com/Tutorial/Java/0320__Network/SaveWeb...
    https://stackoverflow.com/questions/17440236/getti...

    Ну или на худой конец, используйте либу jsoup.
    Вот, пару строк:
    public void downloadPage() throws Exception {
            final Response response = Jsoup.connect("http://www.example.net").execute();
            final Document doc = response.parse();
    
            final File f = new File("filename.html");
            FileUtils.writeStringToFile(f, doc.outerHtml(), StandardCharsets.UTF_8);
        }


    Источник - https://stackoverflow.com/questions/24696766/how-t...
    Ответ написан
    Комментировать
  • Как запустить сервлет?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ну можете для начала попробовать проверить context path. Скорее всего проблема именно в этом.
    Т.е. например, вы пытаетесь открыть урл localhost:8080/, а надо localhost:8080/customPath
    Скорее всего вы столкнулись именно с этим.
    Ответ написан
  • Spring mvc tomcat 404 в чем ошибка?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Могу предположить, что вы некорректно настроили томкат. В настройках вашего IDE необходимо указать context path.
    А затем обращаться к вашему приложению примерно так:
    localhost:8080/myPath/hello-world
    Ответ написан
    Комментировать
  • Почему не удалось получить экземпляр FirebaseDatabase?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Во-первых, ответ легко находится поисковиком.
    Во-вторых, там же написана причина ошибки:
    Failed to get FirebaseDatabase instance: Specify DatabaseURL within FirebaseApp or from your getInstance() call.

    Вот, например:
    https://stackoverflow.com/questions/47730910/faile...
    Ответ написан
    Комментировать
  • Можно ли для придания интерактивности на вэб-страницах в место javascripta использовать java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если речь идет о нормальном проекте, то нет.
    Основу веба составляют 3 языка - html, css, js.
    java, python, php, typescript, ruby лишь серверные языки (в данном контексте). В старых браузерах можно запускать applet'ы, но в новых они не поддерживаются.
    Единственное решение - писать код на Java, который впоследствии транпилируется в JavaScript. Об этом уже упомянул коллега - Vamp
    Ответ написан
    Комментировать