Ответы пользователя по тегу Java
  • Где здесь можно применить наследование в Java?

    Therapyx
    @Therapyx
    Data Science
    Автосалон --> Машины --> Типмашин --> доп функции к этим типам машин

    Конкретно в этом задании можно разбить только машины на типы машин.
    Ответ написан
  • Как найти самую длинную подстроку в строке которая встречается ее менее 2 раз?

    Therapyx
    @Therapyx
    Data Science
    хм, тут зависит еще от вводных. Если не прибегать к определенным фишкам языков, а абстрагироваться тем, что есть почти везде, то я бы скорее всего делал так:
    1) Сделал бы мэп, хешмэп и (co.) в виде "String, int", где стринг это будет часть разбитой подстроки, а инт - это каунтер
    2) Брал бы подстроку и разбивал ее почастично, добавляя в эту структуру данных с инициальным каунтером 1, но
    2.2) Добавляя делать проверку, есть ли такой паттерн уже в ней? если да, то увеличить каунтер
    2.3) Если нету, то добавить в новый индекс с базовым каунтером.
    3) в самом конце пробегаешься по структуре данных, где каунтер 2 и выше, вычисляя приэтом максимум из кол-ва символов в подстроках
    Ответ написан
    Комментировать
  • Как вывести массив объектов с максимальным значением?

    Therapyx
    @Therapyx
    Data Science
    int max = 0;
    for (AviaRejs obj : adv) {
         if (max < obj.getVremya()) {
               max = obj.getVremya();
         }
    }
    System.out.println(max);


    v classe AviaRejs сделай функцию, которая возвращает аттрубут Времени назад. Можно и лучше сделать, но так нагляднее
    Ответ написан
  • Как лучше сократить код return на Java?

    Therapyx
    @Therapyx
    Data Science
    Написать его по человечески, с комментариями и чтобы его мог прочитать другой человек. А потом вернуть true или false.
    мой лучший тебе совет. Не вые... Тренируйся писать хороший код. А хороший код - это не красивый на твой взгляд, а понятный как тебе, так и другим людям.
    Ибо поверь, если в таком ключе будет что-то посложнее и ты вернешься к этому коду через год, то ты потом и глаза и голову сломаешь))
    Ответ написан
  • Как передать несколько массивов из метода в метод?

    Therapyx
    @Therapyx
    Data Science
    Увы уже громоздко и не красиво.
    Выходы:
    1) Сделай класс с нужной информацией и возвращай один обьект, в котором будут все нужные массивы и любая доп. инфа.
    О Классах и обьектах
    2) Оставь все как есть (крайне мерзко) - и сделай к примеру ArrayList типа двухмертных массивов, где он будет содержать борд1 на индексе0, борд2 на индексе 1 и борд3 на индексе2
    Пример
    3) Сделать еще хуже: - 3 массива идут в стэтик (глобальное состояние), к которому можно обратится из любого уголка инстанции.
    Ответ написан
  • Что конкретно делает данная строка в коде?

    Therapyx
    @Therapyx
    Data Science
    Смотри str это массив типа String, т.е. к примеру индекс 0 - строка (маша), индекс 1 - строка (петя), индекс 2 строка (вася).

    когда к массиву обращаются по индексу str[1] - это петя. str[2] - это вася, str[0] - это маша. Т.е. то, что в квадратных скобках - это номер позиции в этом массиве (начинается с нуля).

    Т.е. получаем str1[sortNumber - 1] это тоже самое, что и str[1] или 2 или 3, только в скобках идет вычисление этого номерa.
    sortNumber имеет в том контексте свой номер и минус 1 = число, которое станет в квадратные скобки.
    Идем дальше. После этих вычислений на эту строку добавляется функция, т.е. к примеру имеем массив str1 на позиции "х", где находятся маша, вася или петя применяется функция .charAt(0).
    Идем в гугл и смотрим, что такое .charAt - получаем "charAt(int index) method returns the character at the specified index in a string"
    Т.е. charAt возвращает "букву", не слово, a char на определенном индексе строки. charAt(0) - нулевая позиция в строке.
    Если конкретно взять пример с васей(0), машей(1), петей(2), то
    str1[2].charAt(0) - это первая буква от пети, тоесть "п".

    Обьяснял как можно проще, не кидайте тапками :D
    Ответ написан
    Комментировать
  • Какой код быстрее, там где переменная статическая или она передаётся в методе?

    Therapyx
    @Therapyx
    Data Science
    В теории статик быстрее. На практике - разница зачастую не замечается, так как даже в более запутанных случаях компайлер оптимизирует такие случаи.
    А вот если будешь злоупотреблять статичными переменными, то когда-нибудь тебе надают по рукам за это :D
    Ответ написан
    1 комментарий
  • Все ли связи верны на этой uml диаграмме?

    Therapyx
    @Therapyx
    Data Science
    таблица ужасная, везде тупо раскиданно от нуля до n, связей вообще минимум. Логика ели видна. Даже ассоциация сделана не по правилам.
    1. Не могу понять каким образом будет определятся принадлежность пользователя к группе(в таблице user должно быть еще одно поле...)

    верно мыслите.
    2. Таблица Port(не могу понять почему ее автор сделал красным цветом), помоем в ней нахватает тоже поля с id

    42, порт имеет много хостов и наоборот))

    Не исключаю, что и я могу сказать пургу, ибо не работаю так часто с проектировкой БД... Но подпишусь и мне очень интересно послушать что-то положительное о ней ))
    Ответ написан
    Комментировать
  • Как на java сделать, генератор случайных букв и чисел?

    Therapyx
    @Therapyx
    Data Science
    Так думаю будет яснее.
    import java.util.Random;
    
    char[] array = new char[8];
    int rand;
    Random r = new Random();
    for (int i = 0; i< 8; i++) {
         rand = r.nextInt(127) + 1; //тут менять нужные диапазоны ((max - min) + 1) + min (см ASCII)
         array[i] = (char)rand;
    }
    for(char c : array) 
         System.out.println(c);
    }

    ASCII
    Ответ написан
    Комментировать
  • Как узнать сложность (количество переходов) в поиске по хэш таблице?

    Therapyx
    @Therapyx
    Data Science
    Написать свою хеш таблицу, в ручную и на каждую функцию ->next() считать каунтер))
    По идее, если память не изменяет просто так взять и посчитать сложность хешпоиска в STL нельзя, разве что его править(но могу конечно и ошибаться). Ибо учил все это в плюсах.
    В Хештаблице неизвестное кол во коллизий.
    К примеру представь телефонный справочник
    Хешсимвол А - связь с Артём -> next() -> Алекс -> next() -> Аня....
    Хешсимвол Б - связь с Билл-> next() -> Боря - next() -> Бронислав....
    Артем знает Алекса, но Артем не нает Аню
    Билл знает Борю, но Билл не знает Бронислава
    Таким принципом идет связь между елементами связанными с "хешем". Поэтому чтобы посчитать конечную инстанцию. Надо пройтись по всему связанному списку и постчитать его позицию в данном "на этот момент" состоянии твоей таблицы. После каждого измениня в хеше - оно может измениться.

    п.с. если же есть такие "уникальные" функции в жаве, то интересно будет почитать тоже. Но сомниваюсь... ))
    Ответ написан
    Комментировать
  • Как создать массив в массиве и автовыбор?

    Therapyx
    @Therapyx
    Data Science
    просто создай 1 лист классов "люди". Этот лист ты отображаешь как список, к примеру по имени. На клике по нему - выбирается индекс листа или по айди в аттрибутах и достается вся нужная информация, которая посылается в след активити.
    Ответ написан
  • Какое максимальное количество строк кода должно быть в классе?

    Therapyx
    @Therapyx
    Data Science
    Есть обычные принципы, которые еще никуда не делись
    - связанность => Каждый класс должен делать только 1 заданную задачу. Эти задачи должны выполняться с помощью аттрибутов и методов этого класса. Поэтому в идеале надо добиваться сильной связанности этих аттрибутов и функций.
    - След за этим идет сразу же DRY-Принцын - Dont Repeat Yourself - Когда ты многие функции, аттрибуты раскидываешь как попало и переписываешь заного из-за малейшего изменения, так и плодиться уйма не нужного кода со слабой связанностью.
    - Возможность тестирования => мне очень интересно какой рак это тестить класс из 4000 строк...)))
    - И самое главное "Читабельность, Понимание" => Я конечно верю, что существуют проэкты или задачи, где 4000 строк это было бы норма для 1го класса, даже с идеальной проектировкой. Но я не думаю, что в этом случае это те самые исключения. Лично по моему скудному мнению, если класс уже с 1000-2000 строк, то надо хотябы задуматься о том, что что-то надо бы изменить или начертить UML диаграмму этой области(если ее нету).
    Есть конечно и остальные, но это основное, что касается 4000+ строк
    Ответ написан
    Комментировать
  • Куда двигаться дальше senior разработчику? Новый язык, технологии, opensource, стартап?

    Therapyx
    @Therapyx
    Data Science
    С Возрастом наоборот хочется спокойствия, учить читать - это всегда да, но уже без фанатизма. Если тебе так хочется 24 на 7 проводить в постоянных изучалках и никогда не сидеть на месте, то ищи другое место работы, в крупных компаниях на хотябы средних позициях - сегодня можешь делать программку на жаве, а завтра понадобиться стэк веб технологий, а послезавтра пойдут в дело сети и протоколы, а после после завтра понадобиться написать какой-нибудь плагин на Си. А через неделю настроить машинное обучение на определенные алгоритмы.
    Понимаешь к чему я клоню? ) рассылай резюмешки и доказывай, что ты достаточно компетентен для энной позиции.
    А выбор вектора - это такое... Что для одного хорошо, то для другого плохо. Мне вот например нравится что-то делать с микропроцессорами, но в тоже время для меня это слишком напряжно. Тебе наерняка нравится еще что-то другое, но это не значит, что оно понравится мне. И так тут будет с каждым комментатором, увы. И да, с сеньером ты себя переоцениваешь. Сеньер это далеко не "выучить 1 язык".
    Ответ написан
    Комментировать
  • Как заставить несколько потоков подождать?

    Therapyx
    @Therapyx
    Data Science
    В идеале почитай про Mutex/Semaphore.
    Не в идеале, сделай нужные стрейты для этих потоков. К примеру декларируешь n-ное кол-во булеан переменных, которые будут сложить блокировкой того или иного или всех потоков. Ну и обычным ветвлением проверяешь этот Lock/unlock
    Ответ написан
    Комментировать
  • Как извлечь порт из строки?

    Therapyx
    @Therapyx
    Data Science
    import java.util.StringTokenizer;

    String host = "0.0.0.0:2223";
    StringTokenizer stringTokenizer = new StringTokenizer(host, ":");
    String IP= stringTokenizer .nextElement().toString();
    Integer port = Integer.parseInt(stringTokenizer .nextElement().toString());

    Output:
    Ip = 0.0.0.0 как стринг
    port = 2223 как int

    StringTokenizer очень удобен когда известна структура строк, можно разбивать на маленькие токены по различным критериям, после чего же просто распирсивая их в нужные переменные. Ну или просто скипать )
    Ответ написан
  • Почему java считается медленней С++ других?

    Therapyx
    @Therapyx
    Data Science
    Потому-что жава интерпретирует в байт код находясь в оперативной памяти. Если "С" код идет непосредственно в ячейки оперативной памяти, то на жаве представь так: Что в оперативной памяти есть огромное окно с витуальной машиной, куда идет код, и только оттуда уже в оперативную память.
    Словами может быть не так понятно, на ютубе по этому вопросу есть куча роликов 100% ))
    вот, сразу же первая сссылка... ) https://www.youtube.com/watch?v=G1ubVOl9IBw
    Ответ написан
    Комментировать
  • Структура классов в java?

    Therapyx
    @Therapyx
    Data Science
    Вот он мой пеинт-мастер скилл! Реализация такая, попробуй написать код, если что утром поправлю.
    4511e37f4de941ba9ef92096d27135ec.png
    Ответ написан
    Комментировать
  • Калькулятор на Java, как сделать кнопку backspace?

    Therapyx
    @Therapyx
    Data Science
    Но этот мой код, когда удаляешь все цифры, сначала выдает 0, нажимаешь опять выдает пустую строку и так далее.

    ну если ты используешь бекспейс по "пустому" полю, то так и должно быть, ты спрашиваешь если поле "пустое", то сделай его 0. А если еще раз кликаешь, то оно уже не пустое, и вызывается елс, где ты вырезаешь 0 и поле становится опять пустое. По идее с этим кодом - должно работать так, как я описал выше))
    попробуй дописать if (t.isEmpty() || t.getText() == "0")

    может вообще сплю уже и туплю, тогда извиняй хД
    Ответ написан
    Комментировать
  • Почему изменение копии int'а не всегда меняет исходный int?

    Therapyx
    @Therapyx
    Data Science
    Вариант 1: Смотри, ты создал в куче обьект с адресом "пусть будет 111", после чего ты присваеваешь этот адресс 2ому обьекту. Получается, что обьект 2 имеет тот же адрес "111", потом ты в этом адрессе "111" меняешь возраст на 25, соответственно оба обьекта становятся с адрессом 111.

    Вариант 2: х = 10 это локальная переменная, если ты ее передаешь дальше, то, чтобы ты с ней не делал - в мейне она останется 10. Ты ее изменил на 12 в функции change и 12 она только там, нигде более, после чего ты возвращаешь просто значение 12, которое инициализирует переменную y.

    Понятно? Или что-то побробнее рассказать? ))
    Ответ написан
  • Удалить все пробелы, табуляцию, символы и т.д. из String Java?

    Therapyx
    @Therapyx
    Data Science
    Вот недавно писал для замены строк в текст фаиле с 001, 002, 003, 004.... 500 хД чуток переделал, там где стринги таб, и ньюлайн, просто добавь еще твои варианты и вставь в лупе доп строку для этого стринга. Т.е. просто сделай все нужные варианты, которые нужны именно тебе. В данном же примере я сделал только пробелы и переходы на новую строку

    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.LineNumberReader;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class Replace {
    
    	public static void main(String[] args) throws IOException{	
    		
    		LineNumberReader  lnr = new LineNumberReader(new FileReader(new File("C:/test.txt")));
    		lnr.skip(Long.MAX_VALUE);
    		System.out.println(lnr.getLineNumber() + 1 + " summary rows"); 
    		lnr.close();
    			
    		Path path = Paths.get("C:/test.txt");
    		Charset charset = StandardCharsets.UTF_8;
    		
    		String content = new String(Files.readAllBytes(path), charset);
    		
    		String tab = " ";
    		String newLine = "\n";
    		for (int i = 0; i < lnr.getLineNumber() + 2; i++) {					
    			content = content.replaceAll(tab, "");
    			content = content.replaceAll(newLine, "");
    			Files.write(path, content.getBytes(charset));
    		}	
    	}
    }
    Ответ написан
    Комментировать