Добро пожаловать

Ресурс, посвященный проекту JavaRush.

ПО всем вопросам можно писать на support{собака}javarush.ru.

Обсуждение задач
UPD: Вся активность этого блога переехала на help.javarush.ru. Все вопросы по задачам задавайте там.
Перед тем, как создавать топик или комментарий, прочитайте это.

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

Отзывы — не проходите мимо. Тут вы можете оставить свои отзывы о проекте JavaRush.

Помощь по IntelliJ Idea — тут размещены разнообразные подсказки, видео и ссылки по работе с лучшей IDE для работы с Java.

ЧАВО — самые часто задаваемые вопросы и ответы на них.

План учебного курса — подробный план по уровням курса JavaRush. Тут вы можете узнать, чему именно вы сможете обучиться, какие навыки приобрести.

Инструкции по работе с JavaRush — тут вы узнаете, как правильно пользоваться обучающим курсом, как эффективнее учиться, как правильно задавать вопросы или искать самим на них ответы…

P.S. Еще создана тема для формирования вопросов для Faq по проекту. Присоединяйтесь к формированию вопросов.
  • ,

Как импортировать проект из GitLab в IDEA?

Взяли на практику как Java-Junior, ура!
Дали ноут со свежепереустановленной Windows 10.
Первое задание: установить IDE, импортировать проект из GitLab и запустить его.
Дали акк на GitLab фирмы и ссылку на хранящийся там проект: gitlab.firmaName.net/PROJECTNAME/Backend.git

Как импортировать проект из GitLab в IDEA?

Встрял на втором задании Archiver(2) task.task31.task3110

Всем привет.

Уже второй раз так горит. Все работает. Все нормально. Но вот эти тонкости х**** валидатора.

Подскажите, в чем тут проблема?

Требования:
1. Метод createZip должен создавать ZipOutputStream используя поле zipFile и метод Files.newOutputStream.
2. Метод createZip должен создавать элемент архива ZipEntry c именем файла, полученным из параметра source.
3. Созданный ZipEntry нужно добавить в ZipOutputStream.
4. Для переменной source должен быть создан InputStream с помощью метода Files.newInputStream.
5. Данные из InputStream нужно переписать в ZipOutputStream.
6. Закрой текущий Entry у объекта ZipOutputStream.
7. InputStream для source должен быть закрыт.
8. ZipOutputStream должен быть закрыт.


package com.javarush.task.task31.task3110;

import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFileManager {
    private Path zipFile;

    public ZipFileManager(Path zipFile) {
        this.zipFile = zipFile;
    }

    public void createZip(Path source) throws Exception {
        try(ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(zipFile.getFileName()))) {
            ZipEntry zipEntry = new ZipEntry(source.getFileName().toString());
            zipOutputStream.putNextEntry(zipEntry);

            try(InputStream inputStream = Files.newInputStream(source.getFileName())) {
                while (inputStream.available() > 0) {
                    zipOutputStream.write(inputStream.read());
                }
            }
            zipOutputStream.closeEntry();
        }
    }
}


Второй класс не выкладываю, тк.., ругается не на него.

Заранее спасибо.
  • ,

Задача змейка и невозможность написать свою змейку с 0. В чем моя проблема?

Добрый день.
У меня такое может быть странное обращение, но мне хотелось бы понять где истина)
Заранее простите за возможный сумбур, не берите ничего на личный счет.

Я дошел до 25 уровня.
И только сейчас решил вам написать насчет задачи «Змейка».
разрешите немного пояснить.

Я дошел до 14-ой части, на 14-ой части надо было реализовать метода принт.

Я долго мучался сам, но ничего не смог решить на 14 части. Сидел примерно дня 3-4. Потом мне пришлось начать искать помощи в гугле, я облазил много страничек, но в конце концов мне пришлось просто скопировать чужое решение этой части. Причем я больше времени потратил на копипаст этого решения, потому что подошло только одно из всего множества. (Для меня до сих пор загадка, почему оно подошло, а мое нет)
После 14-ой части было легче.

Я прошел этот уровень, смог идти дальше. Но знаний после этой задачи у меня не осталось.
Я решил закрепить эту задачу написав ее сам, знаете какой результат? Я не смог, потому что я просто не понял как решить 14-ую часть)) К тому же по ходу задачи «Змейка» добавляются автоматически строки кода, и написано(разобраться в них) — я разобрался, но еще раз написать тоже самое не смог.

Я хочу спросить, в чем моя ошибка? Где слабая сторона? Как мне стать лучше? По какой причине у меня не осталось знаний после этой задачи?

String matches и contains не работают регулярные выражения

Здраствуйте
Я не могу понять, почему класс String его методы contains и matches не работают у меня с регулярными выражениями. При этом у других данный код работает. у меня java 8. Может быть такое, что в новой версии данные методы были отменены? или я все таки не правильно что то делаю.

P.S. данную задачу другими методами я могу решить. Я протестировал именно эти методы и они выдали такой
странный результат.

package com.javarush.task.task22.task2212;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
Проверка номера телефона
*/
public class Solution {
    public static boolean checkTelNumber(String telNumber)

    {
        System.out.println(telNumber);
        if(telNumber == null) return false;
        Pattern pattern = Pattern.compile("[a-z]+");
        Matcher matcher = pattern.matcher(telNumber); // так работает
        System.out.println("has symbol: " + matcher.find());
        System.out.println("contains: "+telNumber.contains("\\w"));

        System.out.println("matches: " + telNumber.matches("\\w"));
        System.out.println("contains: " + telNumber.contains("[a-z]"));

        return true;
    }

    public static void main(String[] args) {
        System.out.println(checkTelNumber("sd"));    }
}


вывод данного кода

sd
has symbol: true
contains: false
matches: false
contains: false
true

String matches и contains не работают регулярные выражения

Здраствуйте
Я не могу понять, почему класс String его методы contains и matches не работают у меня с регулярными выражениями. При этом у других данный код работает. у меня java 8. Может быть такое, что в новой версии данные методы были отменены? или я все таки не правильно что то делаю.

P.S. данную задачу другими методами я могу решить. Я протестировал именно эти методы и они выдали такой
странный результат.

package com.javarush.task.task22.task2212;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
Проверка номера телефона
*/
public class Solution {
    public static boolean checkTelNumber(String telNumber)

    {
        System.out.println(telNumber);
        if(telNumber == null) return false;
        Pattern pattern = Pattern.compile("[a-z]+");
        Matcher matcher = pattern.matcher(telNumber); // так работает
        System.out.println("has symbol: " + matcher.find());
        System.out.println("contains: "+telNumber.contains("\\w"));

        System.out.println("matches: " + telNumber.matches("\\w"));
        System.out.println("contains: " + telNumber.contains("[a-z]"));

        return true;
    }

    public static void main(String[] args) {
        System.out.println(checkTelNumber("sd"));    }
}


вывод данного кода

sd
has symbol: true
contains: false
matches: false
contains: false
true
  • ,

Уровень 22. Вопросы.

Регулярные выражения, примеры
Java Multithreading
2 уровень, 11 лекция

В лекции говорится что:
В регулярных выражениях символы «[ ] \ / ^ $. |? * + ( ) { }» имеют специальное значение.
Как и в Java их необходимо экранировать.
Если мы хотим описать, что строка должна состоять из трех символов «?», то нельзя писать так: ?{3}, т.к. символ «?» является управляющим. Надо сделать так: \?{3}

Вопрос: Почему в примере экранируется только символ «?» и не экранируются символы фигурных скобок «{ }»?
  • ,

Сделаешь всё по пунктам, всё работает. Валидатору не нравится.

Всё перепроверишь, и паника. Хорошо если удаётся нагуглить чьё-то решение, и заменить своё, тоже верное, но не по вкусу валидатору которое. А если нет, то клинит напрочь.
  • ,

task2707 - Определяем порядок захвата монитора

Реализуй логику метода isNormalLockOrder, который должен определять:
соответствует ли порядок synchronized блоков в методе someMethodWithSynchronizedBlocks — порядку передаваемых в него аргументов.
В случае, если сначала происходит синхронизация по o1, а потом по o2, метод должен вернуть true.
Если наоборот — false.

Требования:
1. Метод isNormalLockOrder должен возвращать true в случае, если синхронизация в методе someMethodWithSynchronizedBlocks происходит сначала по объекту o1, а потом по o2.
2. Метод isNormalLockOrder должен возвращать false в случае, если синхронизация в методе someMethodWithSynchronizedBlocks происходит сначала по объекту o2, а потом по o1.
3. Метод isNormalLockOrder НЕ должен быть приватным.
4. Класс Solution НЕ должен быть объявлен с модификатором final.

public class Solution {
    public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) {
        synchronized (obj2) {
            synchronized (obj1) {
                System.out.println(obj1 + " " + obj2);
            }
        }
    }

    public static boolean isNormalLockOrder(final Solution solution, final Object o1, final Object o2) throws Exception {

        Thread thread1 = new Thread(){
            @Override
            public void run() {
                solution.someMethodWithSynchronizedBlocks(o1,o2);
            }
        };
        synchronized (o1) {
            thread1.start();
            while (true) {
                Thread.State ts = thread1.getState();
                if (ts == Thread.State.BLOCKED) {
                    System.out.println(thread1.holdsLock(o2));
                    break;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) throws Exception {
        final Solution solution = new Solution();
        final Object o1 = new Object();
        final Object o2 = new Object();

        System.out.println(isNormalLockOrder(solution, o1, o2));
    }
}


Почему thread1.holdsLock(o2) — при любом раскладе, выдает false ???
и как получить .holdsLock(o2) держателя мютекса у объекта о2 ???

level36.lesson10.task01

Выдает null. Помогите понять, что не так.

package com.javarush.test.level36.lesson10.task01;

import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

/* Найти класс по описанию
1. Реализует интерфейс Queue
2. Используется при работе с трэдами
3. Из этой очереди элементы могут быть взяты только тогда, когда они заэкспарятся, их время задержки истекло
4. Головой очереди является элемент, который заэкспарился раньше всех
*/
public class Solution {
    public static void main(final String[] args) {
        System.out.println(getExpectedClass());
    }
    final String packageName = Queue.class.getPackage().getName().replaceAll("\\.", "/");
    public static Class getExpectedClass() {
        final Set<Class> classes = new HashSet<>();
        final String packageName = Queue.class.getPackage().getName().replaceAll("\\.", "/");

        final ClassLoader cl = Thread.currentThread().getContextClassLoader();
        final URL enn = cl.getResource(packageName + "/Queue.class");
        final String jarFilePath = enn.toString().split("file:/")[1].split("!/" + packageName)[0];

        try {
            final JarFile jarFile = new JarFile(jarFilePath);
            final List<? extends JarEntry> jarEntryList = Collections.list(jarFile.entries());

            for (final JarEntry jarEntry : jarEntryList) {
                if (jarEntry.isDirectory()) continue;
                final String fileName = jarEntry.getName();
                if (fileName.startsWith(packageName + "/concurrent") && fileName.endsWith(".class") && !fileName.contains("$")) {
                    final String classPath = fileName.substring(0, fileName.length() - 6).replaceAll("[\\|/]", ".");
                    classes.add(Class.forName(classPath));
                }
            }
        } catch (final IOException | ClassNotFoundException ignored) {
        }

        for (final Class cls : classes) {
            if (Queue.class.isAssignableFrom(cls) && cls.getEnclosingClass() == null && !cls.isInterface()) {
                final Method[] methods = cls.getDeclaredMethods();
                for (final Method m : methods) {
                    if (m.getName().toLowerCase().contains("expired")) {
                        return cls;
                    }
                }
            }
        }
        return null;
    }
}


Выбрасывается исключение на строчке
final JarFile jarFile = new JarFile(jarFilePath);


Я уж от отчаяния попробовал через ZipFile, но один чёрт :).
  • ,

task1630

Компилируется, читает оба файла и выводит в консоль 2 строки с содержимым файлов как и требуется заданием, но валидацию не проходит…

(Метод run класса ReadFileThread должен считывать строки из файла, установленного методом setFileName. А метод getFileContent, этого же класса, должен возвращать вычитанный контент. Возвращаемое значение — это одна строка, состоящая из строк файла, разделенных пробелами. — Содержимое файла должен вычитывать метод run.)

package com.javarush.task.task16.task1630;

import java.io.*;

public class Solution {
    public static String firstFileName;
    public static String secondFileName;

    //add your code here - добавьте код тут
    static {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            firstFileName = reader.readLine();
            secondFileName = reader.readLine();
        } catch (IOException e) { }
    }

    public static void main(String[] args) throws InterruptedException {
        systemOutPrintln(firstFileName);
        systemOutPrintln(secondFileName);
    }

    public static void systemOutPrintln(String fileName) throws InterruptedException {
        ReadFileInterface f = new ReadFileThread();
        f.setFileName(fileName);
        f.start();
        //add your code here - добавьте код тут
        f.join();
        System.out.println(f.getFileContent());
    }

    public interface ReadFileInterface {

        void setFileName(String fullFileName);

        String getFileContent();

        void join() throws InterruptedException;

        void start();
    }

    //add your code here - добавьте код тут
    public static class ReadFileThread extends Thread implements ReadFileInterface {
        private String filename;
        private String filetxt;

        public void run(){
            File f = new File(filename);
            String line;
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(f));
                while ((line = filereader.readLine()) != null){
                    if (filetxt == null) {
                        filetxt = line;
                    } else
                        filetxt += " "+line;
                }
                filereader.close();

            } catch (IOException e) {
                System.out.println("Error!");
            }
        }

        @Override
        public void setFileName(String fullFileName) {
            filename = fullFileName;
        }

        @Override
        public String getFileContent() {
            return filetxt;
        }
    }
}
  • ,

Не могу понять куда копать!

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

public class remove {
    public static void main(String[] args) {
        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
            String file = "D:\\text.txt";// bufferedReader.readLine();
            bufferedReader.close();
            ArrayList<String> list = new ArrayList<>();
            try (BufferedReader fileReader = new BufferedReader(new FileReader(file))) {
                while (fileReader.ready()) {
                    String line = fileReader.readLine();
                    if (!line.contains("параметр=") && line.contains("параметр")) {
                        String arg[] = line.split("=");
                        list.add(arg[0] + "=");
                    } else  //if(line.contains("параметр1=")||line.contains("параметр2=" )||line.contains("параметр3=" ))
                    {
                        list.add(line);
                    }
                }
            }
            try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file))) {
                for (String s : list) {
                    fileWriter.write(s);
                    fileWriter.newLine();
                }
            }
        } catch (IOException e) {
            System.out.println("Что-то с именем файла");
        }

    }
}


файл с тестом
параметр=kn;ljlфывфывфывфы
параметр1=ываываыва
параметр3=фвфывфывфыв
параметр4=ываываываыва
параметр=1ываываыа

При запуски идеи все хорошо выдает:

параметр=kn;ljlфывфывфывфы
параметр1=
параметр3=
параметр4=
параметр=1ываываыа

А вот если сохранить в .jar формат выдает:
параметр=
параметр1=
параметр3=
параметр4=
параметр=

Вопрос, что делаю не так.
P/S это не по задачам javarush, просто хотела написать небольшую утилиту себе в помощь по работе, но вот бяда мои знания пока не достаточно широки чтобы реализовать jar фотмат в номальной кодировки. Как я понимаю дело в кодировке if(line.contains(«параметр=»)) list.add(line); потму как вот сюда не заходит. Сам файл сохранен в блокноте с кодировкой utf-8.