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

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

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

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

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

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

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

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

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

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

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

Очистка строкового массива по критерию (вопрос, 7 уровень)

Доброго времени суток. У меня возник вопрос по поводу решения.
Скорее всего, проблема в элементарной ошибке и недостатке понимания, нежели в чем-то еще.
Не могу быть уверен, что подобный момент где-нибудь здесь не рассматривался ранее.
Впервые, с первого уровня, возникло конкретное непонимание: не удается проследить логику компилятора.

Задача решена и сдана. Вопрос в другом.
Хочу ввести списочный массив, заполнить его строковыми литералами, через цикл «for» и оператор «if»
убрать некоторые объекты, содержащие в себе определенные символы, в данном случае, все объекты.


import java.util.ArrayList;
public class Solution {
    public static void main(String[] args) throws Exception {
        ArrayList<String> list = new ArrayList<>();
        list.add(0, "бром"); //0
        list.add(1, "бром"); //1
        list.add(2, "бром"); //2
        list.add(3, "бром"); //3
        System.out.println("Длина массива до метода fix: "+list.size());
        list = fix(list);
        System.out.println("Длина массива после метода fix: "+list.size());
        for (String s : list) {
            System.out.println(s);
        }
    }
    public static ArrayList<String> fix(ArrayList<String> list) {
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            if (s.contains("р"))
                list.remove(i);
        }
        return list;
    }
}


Вопрос в 17 строке:
(int i = 0; i < list.size(); i++)
Вот что у нас получается: 1 вариант
Если же дополнить его большим количеством объектов в массиве — вообще непонятно что компилируется.

Немного подумав, я заменил данную часть кода на эту, сохранив логику рассуждений:
(int i = list.size() — 1; i >= 0; i--)
После этого компилятор стал выдавать нужный мне результат: 2 вариант

В 1 случае получаем индексы массива: 0,1,2,3
Во 2 случае получаем: 3,2,1,0
Разницы для for и if быть не должно, но… Почему так? Что мне почитать, где я дурак?)

level04.lesson16.home03

Привет!
Помогите разобраться. в IDEA все компилируется и на мой взгляд условия задачи выполнены.
При отправке на проверку пишет что «Программа не компелируется на сервере»

/* Посчитать сумму чисел
Вводить с клавиатуры числа и считать их сумму. Если пользователь ввел -1, вывести на экран сумму и завершить программу.  -1 должно учитываться в сумме.
*/

public class Solution
{
    public static void main(String[] args)   throws Exception {
        int x1 =0;
        int x2 =0;

        while (x1!=-1 && x2!=-1){
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Введите число 1");
            x1 = Integer.parseInt(in.readLine());

            System.out.print("Введите число 2");
            x2 = Integer.parseInt(in.readLine());
            int summ = x1+x2;
            System.out.println(summ);
        }
    }
}

level27.lesson15.big01 Задание 9

Уважаемые, прошу помочь!
Все перепроверил несколько раз, код проходит тесты, но валидатор не принимает. Подскажите, что просмотрел?

NoVideoAvailableException

package com.javarush.test.level27.lesson15.big01.ad;

public class NoVideoAvailableException extends RuntimeException
{}


AdvertisementManager

package com.javarush.test.level27.lesson15.big01.ad;

import com.javarush.test.level27.lesson15.big01.ConsoleHelper;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class AdvertisementManager
{
    private final AdvertisementStorage storage = AdvertisementStorage.getInstance();
    private int timeSeconds;

    public AdvertisementManager(int timeSeconds)
    {
        this.timeSeconds = timeSeconds;
    }

    public void processVideos() throws NoVideoAvailableException
    {
        List<Advertisement> selectedAdv = new ArrayList<>();
        for (Advertisement adv : storage.list())
            if (adv.getDuration() <= timeSeconds)
                selectedAdv.add(adv);

        if (selectedAdv.isEmpty())
            throw new NoVideoAvailableException();

        Collections.sort(selectedAdv, new Comparator<Advertisement>()
        {
            @Override
            public int compare(Advertisement o1, Advertisement o2) {
                return (int) (o1.getAmountPerOneDisplaying() == o2.getAmountPerOneDisplaying()
                        ? (o1.getAmountPerSecond() - o2.getAmountPerSecond()) * 1000000
                        : o2.getAmountPerOneDisplaying() - o1.getAmountPerOneDisplaying());
            }
        });

        for (Advertisement adv : selectedAdv)
        {
            ConsoleHelper.writeMessage(String.format("%s is displaying... %d, %d",
                    adv.getName(),
                    adv.getAmountPerOneDisplaying(),
                    (int) (adv.getAmountPerSecond() * 1000)));

            adv.revalidate();
        }
    }
}


Advertisement

package com.javarush.test.level27.lesson15.big01.ad;

public class Advertisement
{
    private Object content;
    private String name;
    private long initialAmount;
    private int hits;
    private int duration;
    private long amountPerOneDisplaying;

    public Advertisement(Object content, String name, long initialAmount, int hits, int duration)
    {
        this.content = content;
        this.name = name;
        this.initialAmount = initialAmount;
        this.hits = hits;
        this.duration = duration;
        this.amountPerOneDisplaying = initialAmount / hits;
    }

    public String getName()
    {
        return name;
    }

    public int getDuration()
    {
        return duration;
    }

    public long getAmountPerOneDisplaying()
    {
        return amountPerOneDisplaying;
    }

    public double getAmountPerSecond()
    {
        return (double) amountPerOneDisplaying / duration;
    }

    public void revalidate() throws UnsupportedOperationException
    {
        if (hits <= 0)
            throw new UnsupportedOperationException();
        hits--;
    }
}

level32.lesson10.home01 [Решена, НО почему??]

помогите разобраться почему возникает ошибка
import java.rmi.AlreadyBoundException;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

/* К серверу по RMI
Реализуйте логику метода run в CLIENT_THREAD. В нем будет имитироваться клиентская часть,
 которая коннектится к серверу.
1) Из registry получите сервис с именем UNIC_BINDING_NAME
2) Вызовите метод у полученного сервиса, передайте любой непустой аргумент
3) Выведите в консоль результат вызова метода
4) Обработайте исключения
Метод main не участвует в тестировании
*/
public class Solution {
    public static final String UNIC_BINDING_NAME = "double.string";
    public static Registry registry;

    //pretend we start rmi client as CLIENT_THREAD thread
    public static Thread CLIENT_THREAD = new Thread(new Runnable() {
        @Override
        public void run() {
            // add your code here - добавьте код тут
            try {
//                Registry registry = LocateRegistry.createRegistry(2099);
                DoubleString service = (DoubleString) registry.lookup(UNIC_BINDING_NAME);
                String string = service.doubleString("rmi"); // line 32
                System.out.println(string);
            }
            catch (RemoteException e) {
                e.printStackTrace();
            }
            catch (NotBoundException e) {
                e.printStackTrace();
            }

        }
    });

    public static void main(String[] args) {
        //pretend we start rmi server as main thread
        Remote stub = null;
        try {
            registry = LocateRegistry.createRegistry(2099);
            final DoubleStringImpl service = new DoubleStringImpl();

            stub = UnicastRemoteObject.exportObject(service, 0);
            registry.bind(UNIC_BINDING_NAME, stub);
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            e.printStackTrace();
        }

        //start client
        CLIENT_THREAD.start();
    }
}

вывод:
java.rmi.NoSuchObjectException: no such object in table
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
at com.sun.proxy.$Proxy0.doubleString(Unknown Source)
at com.javarush.test.level32.lesson10.home01.Solution$1.run(Solution.java:32)
at java.lang.Thread.run(Thread.java:745)

Process finished with exit code 0

level06.lesson11.bonus02 (не проходит тестирование)

Всем доброго времени суток!
Не могу понять, почему не проходит тестирование.
Компилируется, вывод совпадает с условиями.
public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String grandfatherName = reader.readLine();
        Cat catGrandFather = new Cat(grandfatherName);

        String grandmotherName = reader.readLine();
        Cat catGrandMother = new Cat(grandmotherName);

        String fatherName = reader.readLine();
        Cat catFather = new Cat(fatherName, null, catGrandFather);

        String motherName = reader.readLine();
        Cat catMother = new Cat(motherName, catGrandMother, null);

        String sonName = reader.readLine();
        Cat catSon = new Cat(sonName, catMother, catFather);

        String daughterName = reader.readLine();
        Cat catDaughter = new Cat(daughterName, catMother, catFather);

        System.out.println(catGrandFather);
        System.out.println(catGrandMother);
        System.out.println(catFather);
        System.out.println(catMother);
        System.out.println(catSon);
        System.out.println(catDaughter);
    }

    public static class Cat
    {
        private String name;
        private Cat parent1;
        private Cat parent2;

        Cat(String name)
        {
            this.name = name;
        }

        Cat(String name, Cat parent1, Cat parent2)
        {
            this.name = name;
            this.parent1 = parent1;
            this.parent2 = parent2;
        }


        @Override
        public String toString()
        {
            if (parent1 == null && parent2 == null)
                return "Cat name is " + name + ", no mother, no father";
            else if (parent1 == null)
                return "Cat name is " + name + ", no mother, father is " + parent2.name;
            else if (parent2 == null)
                return "Cat name is " + name + ", mother is " + parent1.name + ", no father";
            else
                return "Cat name is " + name + ", mother is " + parent1.name + ", father is " + parent2.name;
        }

    }
}

package com.javarush.test.level10.lesson11.home05; Подскажите что сделать?)

package com.javarush.test.level10.lesson11.home05;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;

/* Количество букв
Ввести с клавиатуры 10 строчек и подсчитать в них количество различных букв (для 33 букв алфавита).  Вывести результат на экран.
Пример вывода:
а 5
б 8
в 3
г 7
д 0
…
я 9
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        //алфавит
        String abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        char[] abcArray = abc.toCharArray();

        ArrayList<Character> alphabet = new ArrayList<Character>();
        for (int i = 0; i < abcArray.length; i++)
        {
            alphabet.add(abcArray[i]);
        }

        //ввод строк
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 10; i++)
        {
            String s = reader.readLine();
            list.add(s.toLowerCase());
        }


        Map<Character, Integer> treemap = new TreeMap<Character, Integer>();
        for (int i = 0; i < alphabet.size(); i++)
        {
            treemap.put(alphabet.get(i), 0);
        }

        for (Map.Entry<Character, Integer> pair : treemap.entrySet())
        {
            char key = pair.getKey();
            int value = pair.getValue();
            for (int i = 0; i < list.size(); i++)
            {
                char[] slovo = list.get(i).toCharArray();
                for (int z = 0; z < slovo.length; z++)
                {
                    if (slovo[z] == key)

                    {
                        value++;
                       treemap.put(key,value);
                    }
                }

            }
        }

        for(Map.Entry<Character, Integer> pair : treemap.entrySet()) {
         char o  = pair.getKey();
            int u = pair.getValue();
            System.out.println(o + " " + u);
        }
    }

}

Подскажите Почему TreeMap который я использоал, при сортировке русских букв, которые в нём являются ключами букву ё ставит в самый конец… что за шляпа((и как в моём случае подшаманить код???

вот пример ввода:
а
бб
ввв
гггг
ддддд
ееееее
ёёёёёёё
жжжжжжжж
ззззззззз
ииииииииии

Вот пример вывода:
а 1
б 2
в 3
г 4
д 5
е 6
ж 8
з 9
и 10
й 0
к 0
л 0
м 0
н 0
о 0
п 0
р 0
с 0
т 0
у 0
ф 0
х 0
ц 0
ч 0
ш 0
щ 0
ъ 0
ы 0
ь 0
э 0
ю 0
я 0
ё 7

Сервер не принимает работу… я в печали((
  • ,

level15.lesson06.task01

Задание решил и собственно вопрос
public static class JuniorJavaDev extends JavaDev{ // тут как бы наследование не нужно но проходит и так и так
        JavaDev zapp = new JavaDev();
        JavaDev hubert = new JavaDev();

        String askZapp(String question) {
            return zapp.answerQuestion(question);
        }

        String askHubert(String question) {
            return hubert.answerQuestion(question);
        }

}

Как я понимаю наследование не нужно из за того что мы создаем объекты JavaDev и с ними работаем.
Наследование убирается из за связи Has-a или из за чего может есть ссылки на ресурсы где это нормально объясняется?

level13.lesson11.bonus03 вопрос по структуре кода

Подскажите кто знает:
Почему в данном коде команда System.out.print©- выполняется (выводятся символы в IDEA), а
команда  printWriter.print©- не выполняется ( IDEA  символы не выводит, или выводит при использовании
 формата printWriter.println©

package com.javarush.test.level13.lesson11.home03;

/* Чтение файла
1. Считать с консоли имя файла.
2. Вывести в консоль(на экран) содержимое файла.
3. Не забыть освободить ресурсы. Закрыть поток чтения с файла и поток ввода с клавиатуры.
*/

import java.io.*;

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        FileInputStream file = new FileInputStream( "C:\\JavaRushHomeWork\\src\\DO NOT READ.txt");
        String s;
        int i = 0;
        PrintWriter printWriter = new PrintWriter(System.out,true);
        while (file.available() >0)
        {
        int date = file.read();
            char c = (char)date;
            printWriter.print©;
            //   System.out.print©;
        }
        file.close();

        //add your code here
    }
}
  • ,

level28.lesson15.big01 Задание 6 URL Status 400

Есть данная задача, нужно подключиться к сайту и получить объект типа Document, при подключении обработчик ловит ошибку:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=400, URL=https://hh.ru/hhid/bind?token=CE!4UyFuWf0Afk1EH5Z6oPRY2LIn&uid=TAQCLGr3KCBLB1h_jrMfdg--&backurl=https%25253A%25252F%25252Fhh.ru%25252Fsearch%25252Fvacancy%25253Ftext%25253Djava%25252B%252525252525s%252526page%25253D%252525252525d&expires=1484689080788&hash=BIMe2!EcIixAvtbN636bjOuE9oo-&primaryhost=https://hh.ru

насколько я понял ему не нравится ссылка, которую я передаю. Если я передаю ссылку допустим /http://google.com код отрабатывает без проблем так же как и с другими ресурсами. А вот именно с hh.ua/ работать не хочет, пробовал разные ссылки с него подставлять.

Подскажите как быть.

****************************************************************
Задание 6

1. Слева в панеле Project найди снизу External Libraries. В jsoup найди пакет examples, посмотри классы в этом пакете.

2. По аналогии с реализацией в примерах кода jsoup — реализуй коннекшен к урлу ХэдХантера методом GET.
Это нужно сделать в методе getVacancies класса HHStrategy.
Подсказка: получится объект класса Document.

3. Поставь брекпоинт сразу после коннекшена. Запусти программу в дебаг моде.
Скопируй полученное значение document.html() в буффер.

4. Создай файл с расширением html где-то в корне JavaRushHomeWork.
Вставь содержимое буффера в этот файл и отформатируй его Ctrl+Alt+L, IDEA умеет форматировать HTML.
Ура! Это код страницы HTML :)

5. Реализуй в вакансии (Vacancy) методы equals/hashCode
Alt+Enter — equals() and hashCode()


package com.javarush.test.level28.lesson15.big01.model;

import com.javarush.test.level28.lesson15.big01.vo.Vacancy;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by JAY on 1/16/2017.
 */
public class HHStrategy implements Strategy {
    private static final String URL_FORMAT = "http://hh.ru/search/vacancy?text=java+%s&page=%d";
    @Override
    public List<Vacancy> getVacancies(String searchString) {
        List<Vacancy> list = new ArrayList<>();
        Document doc = null;
        try {
            doc = Jsoup.connect(URL_FORMAT).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(doc);
        return null;
    }
}
  • ,

level28.lesson15.big01 Задание 6 URL Status 400

Есть данная задача, нужно подключиться к сайту и получить объект типа Document, при подключении обработчик ловит ошибку:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=400, URL=https://hh.ru/hhid/bind?token=CE!4UyFuWf0Afk1EH5Z6oPRY2LIn&uid=TAQCLGr3KCBLB1h_jrMfdg--&backurl=https%25253A%25252F%25252Fhh.ru%25252Fsearch%25252Fvacancy%25253Ftext%25253Djava%25252B%252525252525s%252526page%25253D%252525252525d&expires=1484689080788&hash=BIMe2!EcIixAvtbN636bjOuE9oo-&primaryhost=https://hh.ru

насколько я понял ему не нравится ссылка, которую я передаю. Если я передаю ссылку допустим /http://google.com код отрабатывает без проблем так же как и с другими ресурсами. А вот именно с hh.ua/ работать не хочет, пробовал разные ссылки с него подставлять.

Подскажите как быть.

****************************************************************
Задание 6

1. Слева в панеле Project найди снизу External Libraries. В jsoup найди пакет examples, посмотри классы в этом пакете.

2. По аналогии с реализацией в примерах кода jsoup — реализуй коннекшен к урлу ХэдХантера методом GET.
Это нужно сделать в методе getVacancies класса HHStrategy.
Подсказка: получится объект класса Document.

3. Поставь брекпоинт сразу после коннекшена. Запусти программу в дебаг моде.
Скопируй полученное значение document.html() в буффер.

4. Создай файл с расширением html где-то в корне JavaRushHomeWork.
Вставь содержимое буффера в этот файл и отформатируй его Ctrl+Alt+L, IDEA умеет форматировать HTML.
Ура! Это код страницы HTML :)

5. Реализуй в вакансии (Vacancy) методы equals/hashCode
Alt+Enter — equals() and hashCode()


package com.javarush.test.level28.lesson15.big01.model;

import com.javarush.test.level28.lesson15.big01.vo.Vacancy;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by JAY on 1/16/2017.
 */
public class HHStrategy implements Strategy {
    private static final String URL_FORMAT = "http://hh.ru/search/vacancy?text=java+%s&page=%d";
    @Override
    public List<Vacancy> getVacancies(String searchString) {
        List<Vacancy> list = new ArrayList<>();
        Document doc = null;
        try {
            doc = Jsoup.connect(URL_FORMAT).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(doc);
        return null;
    }
}

Правильно ли я написал код?

Правильно ли я написал код?
Так как первый вариант, который имел ошибку прошел тестирование. Этот вариант я повторно протестировать не могу, потому подскажите пожалуйста.


package com.javarush.test.level08.lesson11.home09;

import java.util.Date;

/* Работа с датой
1. Реализовать метод isDateOdd(String date) так, чтобы он возвращал true, если количество дней с начала года - нечетное число, иначе false
2. String date передается в формате MAY 1 2013
Не забудьте учесть первый день года.
Пример:
JANUARY 1 2000 = true
JANUARY 2 2020 = false
*/

public class Solution
{
    public static void main(String[] args)
    {
        System.out.println(isDateOdd("JANUARY 1 2000"));
    }

    public static boolean isDateOdd(String date) {
        boolean res = false;
        Date yearStartTime = new Date(date);
        yearStartTime.setHours(0);
        yearStartTime.setMinutes(0);
        yearStartTime.setSeconds(0);

        yearStartTime.setDate(0);
        yearStartTime.setMonth(0);

        Date currentDate = new Date(date);

        long msDay = 24*60*60*1000;
        long msTimeDistance = (currentDate.getTime()) - yearStartTime.getTime();

        int dayCount = (int)(msTimeDistance/msDay);
        if (dayCount % 2 == 0) {
            res = false;
        } else if(dayCount % 2 != 0) {
            res = true;
        }

        return res;
    }
}