• ,

level18.lesson10.home08;

Доброго времени суток, вот уже 5-й вечер не могу решить, прошерстил все подобные моему топику посты, но так и не решил, отчаявшись, прошу помощи


package com.javarush.test.level18.lesson10.home08;

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

/* Нити и байты
Читайте с консоли имена файлов, пока не будет введено слово "exit"
Передайте имя файла в нить ReadThread
Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap,
где параметр String - это имя файла, параметр Integer - это искомый байт.
Закрыть потоки. Не использовать try-with-resources
*/
public class Solution {
    public static Map<String, Integer> resultMap = new HashMap<String, Integer>();


    public static void main(String[] args) throws IOException, InterruptedException
    {



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

        String c;
        while (!(c=reader1.readLine()).equals("exit"))
        {

            new ReadThread©.start();

        }
        
        /*for (Map.Entry<String,Integer> k : resultMap.entrySet())
        {
            int jj = k.getValue();
            System.out.println(k.getKey()+" - "+ ((char) jj));
        }
        */
        reader1.close();





    }

    public static class ReadThread extends Thread {
        public ReadThread(String fileName) {
            super(fileName);

        }

        @Override
        public void run() {

            try
            {
                String fileName = getName();
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"Cp1251"));

                int c;
                ArrayList<Integer> al = new ArrayList<>();
                while ((c=reader.read())!=-1)
                {
                    al.add©;
                }

                Map<Integer,Integer> map = new HashMap<>();

                for (int i = 0; i < al.size() ; i++)
                {
                    map.put(al.get(i),0);
                }

                int maxvalue=0;
                int maxcount=0;

                for (Map.Entry<Integer,Integer> k : map.entrySet())
                {
                    int count = 0;
                    int countvalue = 0;

                    for (int i = 0; i < al.size() ; i++)
                    {
                        int ll = al.get(i);
                        int nn = k.getKey();
                        if (ll==nn)
                        {
                            count++;
                            countvalue = k.getKey();
                        }

                    }
                    if (maxcount<=count)
                    {
                        maxcount=count;
                        maxvalue=countvalue;
                    }
                }

                resultMap.put(fileName,maxvalue);
                reader.close();


            }
            catch (IOException e)
            {

            }

        }
    }
}
  • ,

level07.lesson09.task01;

Не компилируеться сервером, хотя все верно.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.IntSummaryStatistics;
import java.util.List;

/* Три массива
1. Введи с клавиатуры 20 чисел, сохрани их в список и рассортируй по трём другим спискам:
Число делится на 3 (x%3==0), делится на 2 (x%2==0) и все остальные.
Числа, которые делятся на 3 и на 2 одновременно, например 6, попадают в оба списка.
2. Метод printList должен выводить на экран все элементы списка с новой строки.
3. Используя метод printList выведи эти три списка на экран. Сначала тот, который для x%3, потом тот, который для x%2, потом последний.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        ArrayList<Integer> list = new ArrayList<Integer>();
   ArrayList<Integer> list1 = new ArrayList<Integer>();
   ArrayList<Integer> list2 = new ArrayList<Integer>();
   ArrayList<Integer> list3 = new ArrayList<Integer>();
        BufferedReader reader= new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i <20 ; i++)
        {
           list.add(Integer.parseInt(reader.readLine()));

        }


        for (int i = 0; i <list.size() ; i++)
        {if(list.get(i)%3!=0&&list.get(i)%2!=0)
            list3.add(list.get(i));
            else
        {
            if (list.get(i) % 3 == 0)
                list1.add(list.get(i));
            if (list.get(i) % 2 == 0)
                list2.add(list.get(i));
        }
        }
        printList(list1);
       printList(list2);
       printList(list3);

    }

    public static void printList(List<Integer> list)
    {
        for (int i = 0; i < list.size(); i++)
        {
            System.out.println(list.get(i));
        }
        System.out.println();

    }
}
  • ,

package com.javarush.test.level09.lesson11.home04 HELP

package com.javarush.test.level09.lesson11.home04;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/* Конвертер дат
Ввести с клавиатуры дату в формате «08/18/2013»
Вывести на экран эту дату в виде «AUG 18, 2013».
Воспользоваться объектом Date и SimpleDateFormat.
*/

public class Solution {
    public static void main(String[] args) throws Exception {
       SimpleDateFormat date=new SimpleDateFormat("MM/dd/yyyy");
        System.out.println(date.format(new Date()));


       SimpleDateFormat newDateFormat=new SimpleDateFormat("MMM ", Locale.ENGLISH);
       SimpleDateFormat DateFormat= new SimpleDateFormat("dd, yyyy");
        System.out.print(newDateFormat.format(new Date()).toUpperCase()+DateFormat.format(new Date()));
    }
}

выводит в консоль в нужном виде:
01/13/2016
JAN 13, 2016
но сервер не принимает задачу.HELP
  • ,

По следам big 21-25

Всем добрый вечер,

Решая большие задачки уровней 21-25, возникла мысль, что обязательно нужно после решения написать аналоги такие же, только самостоятельно, что я и сделал. После этого возникла следующая мысль — почему бы не сделать это не в консоли, а в «графике»? На праздниках занялся, прошелся по основам swing по Хорстманну, написал небольшой проектик (игры Hippodrom, Tetris, Arcanoid, Snake, Space Wars), используя swing.

Кроме арканоида, придерживался такой логики построения приложения: ужасная, кривая, неправильная до ужаса адаптация mvc — то есть есть сущности, есть логика приложения, есть вьюшка и обработчик событий. Отдаю себе отчет, что код у меня там корявый, просто хотел понять, что такое есть swing, и с чем его едят. Да и времени на это счастье дал себе только до конца праздников, а там, сами понимаете, времени не очень много :)

В общем, jarnik выкладываю, если кто-нибудь решится запустить, особо не ругайте :))

ps для работы, скорее всего, нужна будет java 8, не ниже
  • ,

level06.lesson11.home01

Друзья, помогите. прочитал все ветки по этой задаче, ответа не нашёл.
Что может быть не так? в IDEA программа компилируется, выдаёт результат 10, но на сервере компилироваться не хочет:
«программа не компилируемая на сервере»

package com.javarush.test.level06.lesson11.home01;

/* Класс Cat и статическая переменная catCount
В классе Cat создай статическую переменную public int catCount.
Создай конструктор [public Cat()]. Пусть при каждом создании кота (нового объекта Cat) статическая переменная
catCount увеличивается на 1. Создать 10 объектов Cat и вывести значение переменной catCount на экран.
*/

import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion;

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

       for(int i = 0; i < 10; i++)
       {
           new Cat();
       }

        System.out.println(Cat.catCount);
    }

    public static class Cat
    {
      public static int catCount = 0;

        public Cat()
        {
            catCount++;
        }


    }

}
  • ,

Помогите, нужна мотивация!

Друзья, нужна мотивация!


Я сейчас на 17 уровне и после начала многонитиевости у меня пошли большие проблемы с учебой. Задания стали не только сложные, но и некоторые вообще не понятные для меня. Читаю комментарии, пишут что дальше будет еще сложнее. И как-то становится страшно…

Вот и я хочу узнать рецепт как сэтим справляться)
Может читать больше дополнитльной литературы, может как-то правильно уделять время.
Дело в том, что я занимаюсь по 4 часа в день с понедельника по пятницу. и Иногда читаю Шилдта. Раньше этого хватало, чтобы уверенно идти к завершению курса, но сейчас все поменялось.
Теорию я по смыслу понимаю, а вот когда дело доходит до задач по этой теме — начинаются проблемы. у меня уже «висит» пару десятков задач не решенных и смотря на другие я понимаю, что список пополниться и ими.

подскажите что мне делать)



См. также мои другие статьи:
История успеха спустя 1.5 года от начала обучения
Технические вопросы на собеседовании.
Как найти работу? Рассылка резюме
Профессиональное выгорание. Как устоять?
Английский для IT и для собеседования
Паттерн Command своими словами.
Паттерн Singleton своими словами.
Как создать исполняемый jar в Intellij IDEA / how to create jar in IDEA
Помогите, нужна мотивация!

Мои опросы:
На каком уровне устроились на первую работу?

Подписывайтесь на мой блог Паттерны Проектирования пишите в нем статьи!

Накопилось нерешенных задач.

Уважаемые сокурсники.

Вот такой вопрос. Заметил, что в последнее время, у меня на каждом уровне остается 3-4 нерешенные задачи. Как правило, эти задачи требуют для своего решения гораздо больше времени, чем «проходные».

Таких задач скопилось около 20, что уже начинает напрягать. С другой стороны, интересно, что же там на следующем лвл (а именно, на 18м). Да и запас топлива у звездолета позволяет, наверное, перепрыгнуть три уровня.

И вот меня разрывает две силы: с одной стороны перфекционизм пилит за большое количество нерешенных задач, с другой стороны, интерес тащит дальше по программе. Уверен, я не одинок в терзаниях.

Какой подход более правильный: зарешивать задачи в ноль перед новым уровнем, или что-то оставлять и не париться?

Кто и как решил для себя эту моральную проблему?

level05.lesson12.bonus03

Доброго времени суток. Работает правильно, а проверку не проходит. В чем дело?

package com.javarush.test.level05.lesson12.bonus03;

/* Задача по алгоритмам
Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int maximum = 0;

        int N = Integer.parseInt(reader.readLine());
        int[] array = new int[N];

        for(int i = 0; i < N;i++) {
            array[i] = Integer.parseInt(reader.readLine());
        }
        
        for(int i = 0; i < array.length; i++) {
            if(array[i] > maximum) {
                maximum = array[i];
            }
        }

        System.out.println(maximum);
    }
}

Обсуждение задач level18.lesson03.task03 и level18.lesson03.task04

Недавно долго не мог решить эти задачи, казалось они элементарные. Подобная уже была, когда нужно было подсчитать количество букв в тексте.

Итак условие задачи:
/* Самые частые/редкие байты
Ввести с консоли имя файла
Найти байты, которые встречаются в файле меньше всего раз.
Вывести их на экран через пробел
Закрыть поток ввода-вывода
*/

Топик создается для того чтобы найти правильное решение. Вариантов есть несколько.

В задаче на алфавит все наверное использовали HashMap. Казалось бы можно было скопировать код, поменять источник с консоли на файл, и все. Но здесь можно обойтись массивом, где индексом будет значение байта, а значением элемента — количество.

    int[] howManyTimesIsByteInFile = new int[256];


Массив есть, как в него записать нужные данные я думаю вы знаете. Теперь задача обработать. Хочется в 1 проход, так как очень легкая задача.

    LinkedList<Integer> bytes = new LinkedList<Integer>();
    int maxCount = 0;
        for (int i = 0; i < howManyTimesByteIsInFile.length ; i++)
        {
            if(howManyTimesISByteInFile[i] >= maxCount){
               int n = howManyTimesISByteInFile[i];
                if(n == maxCount){
                       bytes.add(i);
                }
                if(n > maxCount){
                    maxCount = n;
                    bytes.clear();
                    bytes.add(i);
                }   
            }
        }


Очищаем список, чтобы не было элементов, которые встречаются меньше, чем самый частый. Но такой вариант мне не нравится, две проверки, и постоянное очищение списка. Я выбрал решение в два прохада.


        int minCount = 0;
        for (int i = 0; i < howManyTimesByteIsInFile.length ; i++)
        {
            if(howManyTimesByteIsInFile[i] < minCount){
                minCount = howManyTimesByteIsInFile[i];
            }
        }

        LinkedList<Integer> bytes = new LinkedList<Integer>();

        for (int i = 0; i < howManyTimesIsByteInFile.length; i++)
        {
            if(howManyTimesByteIsInFile[i] <= minCount ){
               bytes.add(i);
            }
        }

Сначала ищем максимум/минимум. А вторым проходом находим кто нам подходит. В 8й джаве можно решать задачу даже без циклов, там есть Stream API, на сколько я знаю. Так вот какое решение наиболее оптимально: HashMap vs Array, и один проход vs два прохода?
Вычислительная сложность в обоих случаях O(n), в двух проходах какбы 2n, но 2 это константа, которую можем отбросить. В то же время в одном проходе больше операций с очищением списка.