• ,

task22.task2208 (level22.lesson09.task02)

Всем привет, помогите, кто решил эту задачу?
Я весь форум прочитал, толку мало, всё равно не принимает валидатор.

Формируем WHERE
Сформируй часть запроса WHERE используя StringBuilder.
Если значение null, то параметр не должен попадать в запрос.

Пример:
{«name», «Ivanov», «country», «Ukraine», «city», «Kiev», «age», null}

Результат:
«name = 'Ivanov' and country = 'Ukraine' and city = 'Kiev'»

Требования:
1. Метод getQuery должен принимать один параметр типа Map.
2. Метод getQuery должен иметь тип возвращаемого значения String.
3. Метод getQuery должен быть статическим.
4. Метод getQuery должен возвращать строку сформированную по правилам описанным в условии задачи.

Судя по инфе на форуме, вывод должен быть без двойных ковычек в начеле и конце. И очередность вывода то же не важно.
Всё работает как надо, с любыми параметрами на вход. Уже не знаю что еще сделать…

public static String getQuery(Map<String, String> params) {

        StringBuilder WHERE = new StringBuilder("");

        if(params!=null && !params.isEmpty()) {
                for (Map.Entry<String, String> in : params.entrySet()) {

                if (in.getKey() != null && in.getValue() != null) {
                    WHERE.append(String.format("%s = \'%s\' and ",in.getKey(),in.getValue()));
                }
            }
            WHERE.delete(WHERE.length() - 5, WHERE.length());
         }
        return WHERE.toString();
    }
  • ,

Обжорство программы на JavaFX.

Кто нибудь делал программу на JavaFX?

Заметил одну неприятную особенность, когда начинаешь менять размеры окна программы (Stage), то программа начинает не хило жрать память, может доходить до 900 мегабайт если очень много хаотично менять размер.

Вызов сборщика мусора ничего не даёт, так как он не вызывается по ходу. Если даже Stage закрывается, то все равно висит в пямяти…

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

Может быть кто-то из админов, исходя из своего опыта, знает как чистить?

Единственное, что мне пришло в голову, это исользовать Thread.Sleep(50) в перехватчике событий мыши -setOnMouseDragged, это влияет на плавность, совсем немгого, но жрет прилично меньше оперативки.

Программа visualVM показывает, что память занята int[] и byte[]. Картинку прикладываю.

root.setOnMousePressed(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                if (event.getX() > primaryStage.getWidth() - 20
                        && event.getX() < primaryStage.getWidth()
                        && event.getY() > primaryStage.getHeight() - 20
                        && event.getY() < primaryStage.getHeight()) {
                    resizebottom = true;
                    dx = primaryStage.getWidth() - event.getX();
                    dy = primaryStage.getHeight() - event.getY();
                }
                else {
                    resizebottom = false;
                    xOffset = event.getSceneX();
                    yOffset = event.getSceneY();
                }
                System.gc();
            }
        });


        root.setOnMouseDragged(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                if (!resizebottom) {
                    primaryStage.setX(event.getScreenX() - xOffset);
                    primaryStage.setY(event.getScreenY() - yOffset);
                }
                else {
                    try {
                        Thread.sleep(50);
                        X = event.getX() + dx;
                        Y = event.getY() + dy;

                        // условие, чтобы нельзя было уменьшить окно до сколько угодно
                        if(X>300){
                            primaryStage.setWidth(X);
                        }
                        if(Y>250){
                            primaryStage.setHeight(Y);
                        }
                        //InterruptedException
                    } catch ( Exception e) {
                        e.printStackTrace();
                    }
                }
                System.gc();
            }
        });


  • ,

package com.javarush.task.task19.task1925; - плохой код?

package com.javarush.task.task19.task1925;

/* 
Длинные слова

В метод main первым параметром приходит имя файла1, вторым — файла2.
Файл1 содержит слова, разделенные пробелом.
Записать через запятую в Файл2 слова, длина которых строго больше 6.
В конце файла2 запятой не должно быть.
Закрыть потоки.

Пример выходных данных в файл2:
длинное,короткое,аббревиатура


Требования:
1. Программа НЕ должна считывать данные с консоли.
2. Программа должна считывать содержимое первого файла (используй FileReader c конструктором String).
3. Поток чтения из файла (FileReader) должен быть закрыт.
4. Программа должна записывать через запятую во второй файл все слова из первого файла длина которых строго больше 6(используй FileWriter).
5. Поток записи в файл (FileWriter) должен быть закрыт.
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException{
        BufferedReader file1Reader = new BufferedReader(new FileReader(args[0]));
        BufferedWriter file2Writer = new BufferedWriter(new FileWriter(args[1]));

        String line;
        String str="";
        while ((line=file1Reader.readLine())!=null){
            str=str+line;
        }
        file1Reader.close();
        String[] masStr = str.split(" ");




        for(int i=0;i<masStr.length;i++){
            if(masStr[i].length()>6){
                file2Writer.write(masStr[i]);
                if(i<masStr.length-2){
                    file2Writer.write(",");
                }
            }


        }
        file2Writer.close();
    }
}


Вот еще задача не принимаемая валидатором. В недоумении нашел решенную на GitHub так мой вариант как минимум значительно короче и не создает лишних пару списков. Может я что то методологически не правильно делаю?

Что характерно вариант с GitHub тоже не принимался, после замены PrintWriter на BufferedWriter прошел но почему то как то не могу я согласиться что он правильнее вышеизложенного. Разъясните плиз кто может.

Принятый вариант:
package com.javarush.task.task19.task1925;

/* 
Длинные слова


*/

import java.io.*;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws IOException
    {
        String fileName1 = args[0];
        String input;
        ArrayList<String> fileList = new ArrayList<String>();
        BufferedReader fileReader = new BufferedReader(new FileReader(fileName1));
        while ((input = fileReader.readLine()) != null)
            fileList.add(input);
        fileReader.close();

        ArrayList<String> resultWords = new ArrayList<String>();
        for (String aFileList : fileList)
        {
            String[] stringArray = aFileList.split(" ");
            for (String aStringArray : stringArray)
            {
                if (aStringArray.length() > 6)
                    resultWords.add(aStringArray);
            }
        }

        String result = "";
        for (int i = 0; i < resultWords.size(); i++) {
            if (i == resultWords.size()-1)
                result = result + resultWords.get(i);
            else
                result = result + resultWords.get(i) + ",";
        }

        String fileName2 = args[1];
        BufferedWriter file2Writer = new BufferedWriter(new FileWriter(fileName2));
        file2Writer.write(result);
        file2Writer.close();
    }
}


Чем этот вариант правильнее верхнего?

level21.lesson16.big01 задание 3

Не проходит задание 3 всегда выдает ошибку
«Поле horses должно быть корректно инициализировано в конструкторе класса Hippodrome.»
Код:

public class Hippodrome {
    private ArrayList<Horse> horses = new ArrayList<>();

    public ArrayList<Horse> getHorses() {
        return horses;
    }

    public Hippodrome(List<Horse> horses) {
        this.horses.addAll(horses);
    }

Что надо делать чтоб было корректно?

Посоветуйте пакет для работы с матрицами

Привет.
Столкнулся вот с вопросом: а при помощи чего в джаве системы линейных уравнений с n неизвестными решают?
Может кто-то уже сталкивался и может предложить какие-то удобные (в плане работы с кодом) пакеты?
Можно, конечно, и самому свой писать… но как-то лень)) Такое уж точно тысячу раз написано было))

Сервер опять умер?

Не могу сдать задачу с шести утра (специально пораньше встал позаниматься!), плагин при проверке задачи пишет «НЕИЗВЕСТНАЯ ОШИБКА ПРИ РАБОТЕ С СЕРВЕРОМ».
Что за дела? Сервер починят?

Господа! В полку прибыло.

Привет, парни! Когда-то, почти полтора года назад, я читал здесь посты о том, как люди становились программистами — по-разному — и мне это правда помогло, показав, что такое возможно. Что ж, пора платить ту же дань, для будущих переквалифицировщиков. Надеюсь, кому-то это так же поможет, как помогло когда-то мне. Итак, поехали!

Мой путь в программирование можно поделить на два “плана”, уровня: один — материальный, другой — идеальный. Начнем с первого — он забавный.

Когда-то давно, 29 лет назад, я родился в очень странной семье. Мои родители были выпускниками журфака, бабушка — пианистка, дедушка — физик. С детства я решительно ненавидел читать, но любил музыку и математику. Мама, будучи преподавателем английского, с 4 лет меня обучала языку, а бабушка с 5 лет — музыке. В школе я был сорванцом и затейником, по русскому и литературе — катастрофой, в геометрии и физике — любопытным пионером. Но в 13 лет случилось несчастье, я получил компресионный перелом позвоночника и, не имея возможности сидеть, стал много играть на кларнете. Так я оказался в музыкальном училище через три года.

Но которое не привело меня в Гнесинку, где преподает, кажется, и по сей день мой профессор, И.П. Мозговенко. На 4 курсе я надумал жениться, решил, что пора работать — и стал готовиться к этому.
А что умеет человек, который 7 лет профессионально играл на дудке? Решив, что мне не хватает “кругозора” и всего гуманитарного, что входило в круг обязательного лет 130 назад, я оказался на журфаке, в след моих родителей, сам, по собственной воле.

Забавно, но писать именно в журналистике мне так и не пришлось, за исключением пары месяцев работы в КП, в новостном отделе. Я стал преподавать язык (англ) сам, лет с 20, в 23 на год сгонял в Питер, открыл два Циферблата там (антикафе). Вернувшись, остановился на работе с языком: учил, переводил, работал редактором, написал кое-что в качестве лит.раба (часть книги).

И тут-то я стал закисать. И тут-то мы переходим ко второй части, идеальной.

С детства мне нравилось все необычное. Сначала мне нравилась идея ангелов и бога — самому хотелось летать и помогать людям. Мама, сказав, что для этого сперва придется умереть, ловко остудила мой пыл. Но вектор порыва остался.

Когда занимался академической музыкой, мне было приятно думать, что я занимаюсь чем-то прекрасным само по себе — и что может освещать — и освящать — жизнь других людей. На журфак я шел, отчасти, надеясь, что с помощью журналистики можно сделать жизнь в России лучше. Но те отрывки истории России, которые мне пришлось изучить, донесли очевидное — и с моими идеями было покончено.

В итоге, мне осталось утешать себя тем, что в педагогике я могу делать небольшое “добро” для страны, для людей, а работой со словом занять себя трудным и интеллектуальным трудом. Но и тут…
Педагогика быстро превратилась в рутину. Я видел, что язык знают, в итоге, те, кто им пользуется и его любит, а не кто учит. А полезность работы со словом…

Когда я говорил, что я работаю переводчиком или что пишу, я чувствовал взгляды людей, мол — не высоко, парень, не высоко. Что качественный перевод или качественный текст настолько нисшевый товар сейчас, что я не могу представить себе уважающего себя и нуждающегося в средствах человека, кто мог бы им заниматься. И если когда-то работа со словом была элитарной (XIX век), то сейчас я просто не в обоиме. Я в прошлом веке. Все мои знания литературы, истории, текстов, никому толком не нужны. Я могу развлекать этими знаниями собеседников, но продать это некому — с этим можно только корешиться с нужным людьми (что я вижу ниже своего достоинства) либо идти на ТВ и кромсать бюджет на свой лад (что я ненавижу).

И тут-то я стал закисать. Я стал погружаться вечерами в игры, проводя огромное количество времени на англоязычных форумах, изучая игровую журналистику и т.п. Я строил графики для игры типа Цивилизации, искал оригинальные способы перепройти Dark Souls и т.п. Жена, видя как занудно и упорот я играю в игры, как-то в шутку сказала, что с моим-то рвением в играх неплохо было бы попробовать заняться программированием.
И я подумал, а отчего бы и нет. Дальше — путь обычный. Гугл, JavaRush — меня затянуло; шло легко, быстро, я был на коне. Потом встретилась многопоточность — и я вообще засомневался, программирование — это для меня? Так или иначе, дойдя до 23 уровня, я стал задумываться, а что я, собственно, буду делать на работе. Распустил, скрепя сердце, моих учеников, оставил переводы — и стал присматриваться к вакансиям.

Выбор, по сути, был такой: или java jun или android jun. Я, решив, что android будет повеселее, стяпляпил одно приложение и стал ходить по собеседованиям, который получал с известного всем сайта по поиску работы (обойдемся без лишней рекламы).

Если интересуют сроки, то было так: летом, в августе, я начал изучать программирование, через год разогнал учеников и уперся полностью, через два месяца — на собеседование с готовым проектом; еще через месяц меня взяли на стажировку, где я и остался.

Что можно сказать о моем опыте именно устройства на позицию Android джуна — ошибка была полагать, что мне, с примерным знанием Java, хватит совсем небольших знаний по Android, а остальное подтянется. Android — отдельная платформа, в которой куча своих классов, сложностей и подводных камней, типа памяти и скорости отрисовки экранов. О чем я не знал вообще ничего, когда начинал. Так как меня взяли?

Я сейчас очень странную вещь скажу — я сам не до конца понимаю всех выводов и даже входных данных этого явления — но для устройства на работу мне мои знания программирования не пригодились вот от слова вообще. Мне задали один или два глупых вопроса, типа, как у меня в приложении post запросы выполнялись и какие структуры данных я знаю (я назвал штуки три, которым пользовался, не сказав даже про деревья). Так что же?
Во-первых, мне просто повезло. Им нужен был срочно сотрудник (набрали больше проектов, чем могли сделать), на рынке с мобильными разработчиками туго — и парень, которого они нашли, был готов выйти спустя полтора месяца, а я — сразу, и мне решили дать шанс. Мораль — пробуйте, даже когда шансов мало. Не пробуете — шансов нет. И мало — тоже количество.

Во-вторых, мне помог не связанный с программированием бэкграунд. Оказалось, что ген.дир по совместительству музыкант, и мой муз.колледж завоевал его личный интерес и симпатию. Опыт руководителя косвенно свидетельствовал, что я человек ответственный, грамотная речь — адекватный, а то, что женатый — косвенно о том, что надежный. Женатые меньше рискуют, у них есть (в теории) ответственность. Вывод — лишних знаний не бывает.

В-третьих, личное впечатление. Я открытый человек, без особых закидонов, люблю общение. В маленьких коллективах это важно, так как кому приятно 200+ дней в году смотреть на буку. Вывод, на работу берут человека люди, а не винтик шпунтика.

В-четвертых, образование. МГУшный диплом косвенно говорит о способности поглощать и обрабатывать информацию. Теме “пригодилось ли мне мое образование” я бы мог посвятить научную работу — и не прийти к однозначному выводу, но одно точно: я научился обрабатывать огромные пласты информации и как бы чувствовать, что первично, что вторично в любой области, с которой сталкиваюсь. И этим навыком до журфака я не обладал.

В-пятых, у меня был мотив идти в программирование, о котором я честно рассказал на собеседовании. Ведь человек может многим в жизни заниматься, в конце концов все упирается в то, в чем он себя может найти и реализовать. И для меня это, оказалось, программирование. На вопрос, почему я вдруг решил податься в эту область, я честно сказал, что, во-первых, я имею слабость до алгоритмов и логических задач, а, во-вторых, мне нужна сложная логическая нагрузка — без нее я как бы простаиваю в стойле собственного потенциала.

В итоге, я достиг своей цели — получил работу программистом, и, если честно, как только получил — сразу спросил себя, успех ли это? Получать я стал в три раза меньше, стресс, связанный с количеством нового, ощутим и не маленький. Программисты порой — очень своеобразные люди, и с некоторыми мне тяжело найти общий язык (а некоторые из них — абсолютнейшие душки).

Но в итоге, я прихожу к выводу, что это действительно успех — и что я принял правильное решение. Во-первых, я четко знаю, что то, чем я занимаюсь, это, в некотором роде, арьергард современной культуры. Надо мной уже не смеются, когда я говорю, что я разработчик. Мы делаем нужное всем, сейчас все пользуются результатами нашего труда, и без него свою жизнь большинство слабо представляет. Во-вторых, в перспективе меня ждут многие еще более интересные отрасли (например, андроид в интернет-вещах, в автомобилях), другие города (хочу вернуться в Питер), другие страны (почему бы не пожить в другом месте, если языкового барьера нет?). В-третьих (и это было одной из причин оставить работу со словом и педагогику) — в третьих, программирование — это поток нового на всю жизнь. Да, скажете вы, это стресс, но отсутствие нового — это смерть. Это тоска. Люди, которые погружаются в рабочую рутину, немножко умирают внутри. Ведь детство — это когда вокруг новое. Программисты в чем-то всегда дети, потому что мир для них — вернее, в мире для них всегда есть новое.
Наверное, другие выводы и другие мысли посетят меня спустя год, пять, десять на счет этой вехи в моей жизни. Возможно, я когда-нибудь оставлю и эту профессию и вернусь к письму — кто знает. Но пока мой опыт такой, им и хотел поделиться. Дерзайте те, кто в раздумье. Жизнь одна, зачем ее тратить в нерешительности?
Успехов!

ps
Рассказ получился довольно выборочным, но занудства освящать каждый аспект методично не хватает. Есть вопросы — задавайте!
  • ,

Как создать новый репозиторий без создания нового проекта?

Здравствуйте!

Как переключаться в idea между репозиториями и создать новый репозиторий без создания нового проекта?

Пожалуйста, подробнее, я тугодум(((0

Я хочу разбить JavaRush на 4 репозитория. Первый репозиторий создал на 10 уровне, сейчас я на 16 и в моем репозитории только 10-16 уровни.
При попытке создать новый проект через ИДЕЯ он мне зараза создает новый репозиторий со всеми файлами, и 0-10 и 10-16 уровня. А мне не надо 10-16 уровни добавлять. Как их убрать тоже не знаю и как переключаться между репозиториями в пределах одного проекта тоже не знаю.

Помогиите(
  • ,

task.task20.task2001 что куда записывается?

Читаем и пишем в файл: Human

Реализуй логику записи в файл и чтения из файла для класса Human.

Поле name в классе Human не может быть пустым.

Метод main реализован только для вас и не участвует в тестировании.


public class Solution
{
    public static void main(String[] args)
    {
        try
        {
            File your_file_name = File.createTempFile("your_file_name", null);
            OutputStream outputStream = new FileOutputStream(your_file_name);
            InputStream inputStream = new FileInputStream(your_file_name);

            Human ivanov = new Human("Ivanov", new Asset("home"), new Asset("car"));
            ivanov.save(outputStream);
            outputStream.flush();

            Human somePerson = new Human();
            somePerson.load(inputStream);

            System.out.println(ivanov); 
            System.out.println(somePerson);
            // Как таким образом вообще возможно сравнить два объекта?
            inputStream.close();

        } catch (IOException e)
        {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with my file");
        } catch (Exception e)
        {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with save/load method");
        }
    }

    public static class Human
    {
        public String name;
        public List<Asset> assets = new ArrayList<>();

        public Human()
        {}
        
        @Override //Абсолютно непонятное переназначение equals
        public boolean equals(Object o)
        {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass())
                return false;

            Human human = (Human) o;

            if (name != null ? !name.equals(human.name) : human.name != null)
                return false;
            return assets != null ? assets.equals(human.assets) : human.assets == null;

        }

        @Override
        public int hashCode() //На это забить пока можно, да?
        {
            int result = name != null ? name.hashCode() : 0;
            result = 31 * result + (assets != null ? assets.hashCode() : 0);
            return result;
        }

        public Human(String name, Asset... assets)
        {
            this.name = name;
            if (assets != null)
            {
                this.assets.addAll(Arrays.asList(assets));
            }
        }

        public void save(OutputStream outputStream) throws Exception
        {
            PrintWriter printWriter = new PrintWriter(outputStream);

            String hasName = (this.name != null) ? "yes" : "no"; // Проверяем, есть ли у объекта Human имя

            printWriter.println(hasName); // Пишем "yes", если есть (И ЭТО "YES" НЕПОНЯТНО ЗАЧЕМ ПИШЕТСЯ В ФАЙЛ??????!!!!)

            if ("yes".equals(hasName))
            {
                printWriter.println(this.name); // Пишем в файл имя

                if (this.assets.size() > 0)
                {
                    for (Asset current : this.assets)
                    {
                        printWriter.println(current.getName()); // Пишем уже имущество в следующие строки
                    }
                }
            }
            printWriter.close();
        }

        public void load(InputStream inputStream) throws Exception
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

            String hasName = reader.readLine();

            if ("yes".equals(hasName))
            {
                this.name = reader.readLine();

                String assetName;

                while ((assetName = reader.readLine()) != null)
                {
                    this.assets.add(new Asset(assetName));
                }
            }
            reader.close();
        }
    }
}