• ,

level18.lesson05.task03

Народ, подскажите, пожалуйста, что тут может быть не так. В файлы все пишется как надо, отрабатывает и для четных байт, и для нечетных, для пустого первого файла тоже все работает. Все потоки закрыты. Что тут не так?

package com.javarush.test.level18.lesson05.task03;

/* Разделение файла
Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать бОльшую часть.
Закрыть потоки. Не использовать try-with-resources
*/

import java.io.*;

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

//        чтение файлов с консоли
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        InputStream inputStream = new FileInputStream(reader.readLine());
        FileOutputStream outputStream1 = new FileOutputStream(reader.readLine());
        FileOutputStream outputStream2 = new FileOutputStream(reader.readLine());

//        определяем, сколько всего символов, заносим их в массив buffer
        int count = inputStream.available();
        int countFirstOutput, countSecondOutput;
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);

        if (count > 0) {
            if (count % 2 == 0) {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 1;
            } else {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 2;
            }
        } else {

//            выполняется в том случае, если первый файл пустой
            countFirstOutput = 0;
            countSecondOutput = 0;
        }

//        пишем в потоки
        outputStream1.write(buffer, 0, countFirstOutput);
        outputStream2.write(buffer, countFirstOutput, countSecondOutput);

//        закрытие потоков
        reader.close();
        inputStream.close();
        outputStream1.close();
        outputStream2.close();

    }
}
  • ,

не проходит тестирование

Работает как надо,
но я уже забодался гадать, что этой проверке нужно:
может кто подскажет?
package com.javarush.test.level09.lesson11.home05;

import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;

/* Гласные и согласные буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа должна вывести на экран две строки:
1. первая строка содержит только гласные буквы
2. вторая - только согласные буквы и знаки препинания из введённой строки.
Буквы соединять пробелом, каждая строка должна заканчиваться пробелом.

Пример ввода:
Мама мыла раму.
Пример вывода:
а а ы а а у
М м м л р м .
*/

public class Solution
{

    public static void main(String[] args) throws Exception
    {
        //напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String string = reader.readLine();
        char[] arr = string.toCharArray();
        LinkedList<Character> list = new LinkedList<>();
        for (int i = 0; i < arr.length; i++)
        {
            list.add(arr[i]);
        }
        LinkedList<Character> lv = new LinkedList<>();
        for (int i = 0; i < list.size(); i++)
        {
            if (isVowel(list.get(i))){
                lv.add(list.get(i));
                list.remove(i);
                if (i!=0) i--;
            }
            if (list.get(i) == " ".charAt(0)) list.remove(i);
        }
        System.out.println(setStr(lv));
        System.out.print(setStr(list));
    }

    public static char[] vowels = new char[]{'а', 'я', 'у', 'ю', 'и', 'ы', 'э', 'е', 'о', 'ё'};

    //метод проверяет, гласная ли буква
    public static boolean isVowel(char c)
    {
        c = Character.toLowerCase©;  //приводим символ в нижний регистр - от заглавных к строчным буквам

        for (char d : vowels)   //ищем среди массива гласных
        {
            if (c == d)
                return true;
        }
        return false;
    }

    public static String setStr (LinkedList list)
    {
        String str="";
        for (int i = 0; i < list.size(); i++)
        {
            str += list.get(i)+" ";
        }
        return str;

    }
}
  • ,

Если решаешь задачу с n-нного раза, балы не начисляются?

Вопрос, собссно, в теме.
Заметил несколько раз, что баллы за задачи не начислялись.
Вот сейчас решил задачу с 15 раза (level10.lesson11.bonus03;).
Это глюк или так задумано?
Если так задумано, то:
1. с какого раза нужно решать, чтоб добавлялись баллы?
2. где это написано?
Всем спасибо!

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

Изменения в лекциях

Недавно в комментариях к какой-то теме один добрый человек выложил свои материалы, которые он писал, обучаясь тут. За что ему большое спасибо, но не помню, где это было, чтобы написать там.
Но дело не в этом. Произошла такая интересная история:
как и у многих, уровни начиная с 17 требуют много времени. Вот сижу, ковыряю. Доковыряла до задач 18ого уровня, прочитав лекции и половину доп.материалов. Смотрю задачу, понимаю, что решить ее можно несложно, но кажется велосипед. Думаю-думаю, ничего не придумывается кроме похожих на велосипед вещей. Думаю, а как ее решали до меня. Смотрю, все как один используют RandomAccessFile, о котором в лекциях ни слова. Только в доп.материалах. Мой велосипед на нем и основывался, но до некоторых вещей я своим умом не дошла. Думаю, надо получше почитать про это… где-то были тут материалы от доброго человека. Открываю, смотрю и понимаю, что раньше (похоже) это было в лекциях. А сейчас нет. А задача осталась.
Дело не в том, что непонятно как ее решать (хотя, конечно, некоторые непонятки могут возникать и иногда довольно сильно раздражают). Как-то грустно стало, что лекции урезали и я сейчас читаю эти урезанные лекции, а доп.информация впитывается не так хорошо, как лекции.

Если вдруг кто-то из администраторов сюда зайдет, было бы интересно узнать, почему так порезали лекции =(

Ошибка сервера при сдаче задач

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

Задачи окружающего мира решаемые Java

Прим. автора поста: Перевод местами сделан не совсем гладко. В попытке сгладить шероховатости, были сделаны вольные дополнения, которые нисколько не портят смысл статьи. Оригинал статьи вот здесь
Целевая аудитория статьи — люди, которые колеблются пуститься в плавание в мире Java.


Редакция dzone.com побеседовала с 11 профессионалами в бизнесе, плотно работающих большую часть, если не больше, свой карьеры в экосистеме Java. Спросили их о задачах в реальном мире, которые решаются Java.
  • ,

Онлайн тесты на работу.

Добрый день. Вообщем решил создать такую тему. Многие конторы при устройстве на работу используют онлайн тестирование. При том условия на англ. языке и вот сегодня я писал такой тест — www.hackerrank.com/
Рекомендую всем попробовать. Тем более что JavaRush свои задачи в паблик не приветствует, а там можно рейтинг потом работодателю показать. Но да ладно, не об этом сейчас.
Вообщем у меня было 4 теста, на 90 минут. Решать все не обязательно и написано что лучше решить несколько но качественно. И я бы хотел их обсудить, т.к. не понял как их можно было решить лучше)))))
Задача 1. Написать такое — static int result(int[] arr){}
Дается массив, в котором найти разницу между самым большим элементом и самым маленьким, при том индекс самого маленького должен быть меньше индекса самого большого.
Я решал наверно как все подумали — первый for ищет самый большой элемент и индекс.
Потом второй for ищет самый маленький элемент в элементах до indexMax.
И просто вывожу разницу. И вот это решение не самое оптимальное, набрало всего 3 теста из 10.
Какие есть предложения решить ее лучше? сейчас вот думаю может можно было как то в один фор вложить, но как, если последовательность после max элемента не должна участвовать… или возможно что нибудь типа public static synchronized и т.д. тоже дают плюсы по тестам, не проверял кроме public

Задача 2. написать String[] result(String S, String T){}
Дается две строки. (На javarush похожая была с файлами) Строка T это строка S без некоторых слов. Вернуть массив слов которых не хватает в Т.
Решал так split(t)=" " — результат в set;
split(s)=" ", for и если !set.contains(s[i]) то добавляем в ArrayListresult;
потом return result.toArray(new String[0]);
5 теста из 10;
Сначала result был Set — было 3 теста из 10;
У кого еще какие замечания и предложения есть?

Задача 3. я не решал но если кому интересно — дан текст String[] и найти все домены в тексте и вывести на экран. Типа «ляляля www.xyz.ru лялл ялл ww2.abc.com/sfsflj&dsf?dsfslj/index.html ляляля» вывести «xyz.ru;abc.com»

4-ая С бинарными деревьями, не читал, жаль времени было
  • ,

javarush.test.level18.lesson05.task03 HELP!

/* Разделение файла
Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать бОльшую часть.
Закрыть потоки. Не использовать try-with-resources
*/
Код функцию выполняет, тестирование не проходит, помогите люди добрые

import java.io.*;

public class Solution {
    static String nameOne;
    static String nameTwo;
    static String nameThree;
    static FileInputStream fileInputStream;
    static FileOutputStream fileOutputStreamOne;
    static FileOutputStream fileOutputStreamTwo;
    public static void main(String[] args) {
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
        try
        {
            nameOne=bufferedReader.readLine();
            nameTwo=bufferedReader.readLine();
            nameThree=bufferedReader.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        try
        {
            fileInputStream=new FileInputStream (nameOne);
            fileOutputStreamOne=new FileOutputStream(nameTwo);
            fileOutputStreamTwo=new FileOutputStream(nameThree);
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        try
        {
            byte [] byffer=new byte[fileInputStream.available()];

            while (fileInputStream.available()>0)
            {
                int count = fileInputStream.read(byffer);


                fileOutputStreamOne.write(byffer, 0, count/2+count%2);

                fileOutputStreamTwo.write(byffer,  count/2+count%2, count-count/2-count%2);

            }

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        try
        {
            fileInputStream.close();
            fileOutputStreamTwo.close();
            fileOutputStreamOne.close();
            bufferedReader.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }
}

level18.lesson05.task03

У меня вопрос ведь в задании не сказано что для каждого файла должен быть свой поток. Я решил задачу используя один поток для записи в файл. Открыл поток для первого файла, записал в него часть данных, закрыл. Открыл для второго файла, записал оставшееся и закрыл. Задача не была принята на сервере до тех пор пока не сделал для каждого файла свой поток записи. Почему нельзя было использовать один поток, из-за этого могут быть какие-то проблемы?
  • ,

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)
            {

            }

        }
    }
}