• ,

task29.task2909 Рефакторинг (12) (Решена)

Всем здравствуйте. Просто беда с задачей, уже мозги сломал. может кто сможет помочь:

Рефакторинг (12)

12.1. Объединение условных операторов.

12.1.1. Добавь внутренний метод, сообщающий, могут ли быть перевезены пассажиры

boolean canPassengersBeTransferred() в класс Car. Метод должен возвращать true, если

водитель доступен isDriverAvailable и есть топливо fuel.

12.1.2. Перепиши метод getNumberOfPassengersCanBeTransferred(), объединив условные

операторы (используй метод canPassengersBeTransferred()).

12.2. Объединение дублирующихся фрагментов в условных операторах. Перепиши метод

startMoving(), чтобы в нем не было повторяющихся вызовов функций.

12.3. Замена магического числа символьной константой. Замени магические числа в методе

getMaxSpeed() на константные переменные метода: MAX_TRUCK_SPEED,

MAX_SEDAN_SPEED и MAX_CABRIOLET_SPEED.

12.4. Замена условного оператора полиморфизмом.

12.4.1. Переопредели метод getMaxSpeed() в подклассах, избавившись от условного оператора.

12.4.2. Метод getMaxSpeed() в классе Car сделай абстрактным.

public abstract class Car {
    static public final int TRUCK = 0;
    static public final int SEDAN = 1;
    static public final int CABRIOLET = 2;

    double fuel;

    public double summerFuelConsumption;
    public double winterFuelConsumption;
    public double winterWarmingUp;

    private int type;

    private boolean driverAvailable;
    private int numberOfPassengers;

    protected Car(int type, int numberOfPassengers) {
        this.type = type;
        this.numberOfPassengers = numberOfPassengers;
    }

    public static Car create(int type, int numberOfPassengers){
        switch (type){
            case TRUCK:
                return new Truck(numberOfPassengers);
            case SEDAN:
                return new Sedan(numberOfPassengers);
            default:
                return new Cabriolet(numberOfPassengers);
        }
    }

    public void fill(double numberOfLiters) throws Exception{
        if (numberOfLiters < 0) {
            throw new Exception();
        }
        fuel += numberOfLiters;
    }

    public boolean isSummer(Date date , Date summerStart, Date summerEnd){
        return !(date.before(summerStart) || date.after(summerEnd));
    }

    public double getWinterConsumption(int length){
        return length * winterFuelConsumption + winterWarmingUp;
    }

    public double getSummerConsumption(int length){
        return length * summerFuelConsumption;
    }

    private boolean canPassengersBeTransferred(){
        return isDriverAvailable() && fuel > 0;
    }

    public double getTripConsumption(Date date, int length, Date SummerStart, Date SummerEnd) {
        if (!isSummer(date, SummerStart, SummerEnd)) {
            return getWinterConsumption(length);
        } else {
            return getSummerConsumption(length);
        }
    }

    public int getNumberOfPassengersCanBeTransferred() {
        if (!canPassengersBeTransferred())
            return 0;

        return numberOfPassengers;
    }

    public boolean isDriverAvailable() {
        return driverAvailable;
    }

    public void setDriverAvailable(boolean driverAvailable) {
        this.driverAvailable = driverAvailable;
    }

    public void startMoving() {
        if (numberOfPassengers > 0) {
            fastenPassengersBelts();
        }

        fastenDriverBelt();
    }

    public void fastenPassengersBelts() {
    }

    public void fastenDriverBelt() {
    }

    protected abstract int getMaxSpeed();
}


public class Truck extends Car{

    public Truck(int numberOfPassengers) {
        super(TRUCK, numberOfPassengers);
    }

    @Override
    public int getMaxSpeed() {
        final int MAX_TRUCK_SPEED = 80;
        return MAX_TRUCK_SPEED;
    }
}


public class Sedan extends Car{

    public Sedan(int numberOfPassengers) {
        super(SEDAN, numberOfPassengers);
    }

    @Override
    public int getMaxSpeed() {
        final int MAX_SEDAN_SPEED = 120;
        return MAX_SEDAN_SPEED;
    }
}


public class Cabriolet extends Car{

    public Cabriolet(int numberOfPassengers) {
        super(CABRIOLET, numberOfPassengers);
    }

    @Override
    public int getMaxSpeed() {
        final int MAX_CABRIOLET_SPEED = 90;
        return MAX_CABRIOLET_SPEED;
    }
}


Валидатор выдаёт:


Может есть идеи? Заранее благодарен.

com.javarush.task.task19.task1906

/*
Четные байты
Считать с консоли 2 имени файла.
Вывести во второй файл все байты с четным индексом.

Пример:
второй байт, четвертый байт, шестой байт и т.д.

Закрыть потоки ввода-вывода.
*/

package com.javarush.task.task19.task1906;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;

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

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileReader fileReader = new FileReader(bufferedReader.readLine());
        FileWriter fileWriter = new FileWriter(bufferedReader.readLine());
        bufferedReader.close();

        int count = 1;

        while (fileReader.ready()){
            if ((count%2)==0){
                fileWriter.write(fileReader.read());
            }
            count++;
        }
        fileReader.close();
        fileWriter.close();
    }
}


Не проходит проверку. Подозреваю, что считывать нужно всё-таки байты, а не символы? Для этого нужно написать адаптер от FileReader к InputStream или как-то по-другому? Какой тогда интерфейс должен реализовывать класс-адаптер, если InputStream это не интерфейс? Или можно унаследоваться от InputStream? Помогите плс, кто шарит. Если что, в задаче обязательно использовать именно FileReader.

task.task20.task2002 Не хочет принимать гад

Буду очень благодарен, если кто-то все-таки сможет сказать, что же тут не так

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

    }

    public static class JavaRush {
        public List<User> users = new ArrayList<>();
        SimpleDateFormat form = new SimpleDateFormat("dd MM yyyy");

        public void save(OutputStream outputStream) throws Exception {
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
            int size = users.size();
            writer.println(size);
            if (size>0)
            {
                for(User us : users)
                {
//                    пишем имя
                    writer.println(us.getFirstName());

//                    пишем фамилию
                    writer.println(us.getLastName());

//                    пишем дату
                    writer.println(form.format(us.getBirthDate()));

//                    пишем пол
                    writer.println(us.isMale());

//                    пишем страну
                    writer.println(us.getCountry());


                }
            }
        }

        public void load(InputStream inputStream) throws Exception {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                while (reader.ready())
                {  int size = Integer.parseInt(reader.readLine());
                    for(int i = 0;i<size;i++) {
                        User us = new User();

                        String name = reader.readLine();
                        if(name.equals("null"))
                        us.setFirstName(null);
                        else  us.setFirstName(name);

                        String last = reader.readLine();
                        if (last.equals("null"))
                        us.setLastName(null);
                        else us.setLastName(last);

                        String bd = reader.readLine();
                        if (bd.equals("null"))
                            us.setBirthDate(null);
                        else
                        us.setBirthDate(form.parse(bd));

                        String male = reader.readLine();
                        if (male.equals("true")) us.setMale(true);
                        else  us.setMale(false);

                        String cont = reader.readLine();
                        if (cont.equals("null"))
                        us.setCountry(null);
                        else us.setCountry(User.Country.valueOf(cont));
                        users.add(us);
                    }
                }
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            JavaRush javaRush = (JavaRush) o;

            return users != null ? users.equals(javaRush.users) : javaRush.users == null;

        }

        @Override
        public int hashCode() {
            return users != null ? users.hashCode() : 0;
        }
    }
}
  • ,

package com.javarush.task.task08.task0812;

Завдання:
Cамая длинная последовательность
1. Создай список чисел.
2. Добавь в список 10 чисел с клавиатуры.
3. Вывести на экран длину самой длинной последовательности повторяющихся чисел в списке.


Пробував 2 колекціями ArrayList, також не приймало. Вже 1 колекцією ArrayList зробив, все одно не приймає.

package com.javarush.task.task08.task0812;

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

/* 
Cамая длинная последовательность
*/
public class Solution {
    static int count = 0;

    public static void main(String[] args) throws IOException {
        final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Integer> list = new ArrayList<>();
        int number = 1;
        for (int i = 0; i < 10; i++) {
            list.add(Integer.parseInt(reader.readLine()));
        }

        for (int i = 1; i < list.size(); i++) {
            if (list.get(i - 1) == list.get(i)) {
                count++;
                if (i == 9) {
                    count++;
                }
            } else {
                count++;
                if (count > number) {
                    number = count;
                }
                count = 0;
            }

            if (count > number) {
                number = count;
            }
        }
        System.out.println(number);
    }
}

package com.javarush.test.level20.lesson02.task01;

Собственно проблема. При втором вызове метода load reader уже читает null'ы, в чем проблема?

/* Читаем и пишем в файл: Human
Реализуйте логику записи в файл и чтения из файла для класса Human
Поле name в классе Human не может быть пустым
В файле your_file_name.tmp может быть несколько объектов Human
Метод main реализован только для вас и не участвует в тестировании
*/

public class Solution {
    public static void main(String[] args) {
        //you can find your_file_name.tmp in your TMP directory or fix outputStream/inputStream according to your real file location
        //вы можете найти your_file_name.tmp в папке TMP или исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {

            File your_file_name = File.createTempFile("your_file_name", null);
            your_file_name = new File("1.txt");
            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"));
            Human petrov = new Human("petrov", new Asset("guitar"));
            Human sidorov = new Human("sidorov", new Asset("wife"));
            ivanov.save(outputStream);
            petrov.save(outputStream);
            sidorov.save(outputStream);
            outputStream.flush();

            Human somePerson = new Human();
            Human somePerson1 = new Human();
            Human somePerson2 = new Human();
            somePerson.load(inputStream);
            somePerson1.load(inputStream);
            somePerson2.load(inputStream);
            //check here that ivanov equals to somePerson - проверьте тут, что ivanov и 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() {
        }

        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 writer = new PrintWriter(outputStream);
            writer.println(name);
            if (!assets.isEmpty()) {
                writer.println(true);
                writer.println(assets.size());
                for (Asset asset : assets) {
                    writer.println(asset.getName());
                    writer.println(asset.getPrice());
                }
            } else {
                writer.println(false);
            }
            writer.flush();
        }

        public void load(InputStream inputStream) throws Exception {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            name = reader.readLine();
            if (reader.readLine().equals("true")) {
                int count = Integer.parseInt(reader.readLine());
                for(int i = 0; i < count; i ++) {
                    Asset asset = new Asset(reader.readLine());
                    asset.setPrice(Double.parseDouble(reader.readLine()));
                    assets.add(asset);
                }
            }
        }
    }
}
  • ,

Тестовое задание: "Написать Интерпретатор на язык BrainFuck"

Привет всем!

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

package com.javarush.test.level19.lesson10.bonus01;

Мне бы тестовых данных:)
Почему-то не проходит(
/* Отслеживаем изменения
Считать в консоли 2 имени файла — file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME
Пример:
оригинальный редактированный общий
file1: file2: результат:(lines)

строка1 строка1 SAME строка1
строка2 REMOVED строка2
строка3 строка3 SAME строка3
строка4 REMOVED строка4
строка5 строка5 SAME строка5
строка0 ADDED строка0
строка1 строка1 SAME строка1
строка2 REMOVED строка2
строка3 строка3 SAME строка3
строка5 ADDED строка5
строка4 строка4 SAME строка4
строка5 REMOVED строка5
*/


    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = reader.readLine();
        String fileName2 = reader.readLine();

        BufferedReader iReader = new BufferedReader(new FileReader(fileName1));
        BufferedReader iReader2 = new BufferedReader(new FileReader(fileName2));

        ArrayList<String> file1 = new ArrayList<>();
        ArrayList<String> file2 = new ArrayList<>();

        while (iReader.ready()) {
            file1.add(iReader.readLine());
        }
        while (iReader2.ready()) {
            file2.add(iReader2.readLine());
        }

        int i = 0;
        int removed = 0;
        while (file1.size() > i) {
            String line1 = file1.get(i);
            String line2;
            if (file2.size() > i - removed) {
                line2 = file2.get(i - removed);
            }else{
                lines.add(new LineItem(Type.REMOVED, line1));
                break;
            }

            if (line1.equals(line2)) {
                lines.add(new LineItem(Type.SAME, line1));
            } else {
                String line22 = file2.get(i + 1 - removed);
                if (line1.equals(line22)) {
                    lines.add(new LineItem(Type.ADDED, line2));
                    lines.add(new LineItem(Type.SAME, line1));
                    removed--;
                } else {
                    lines.add(new LineItem(Type.REMOVED, line1));
                    removed++;
                }
            }
            i++;
        }


        reader.close();
        iReader.close();
        iReader2.close();
    }
  • ,

level16.lesson13.bonus02

Народ, помогите! Я че-т уже все перепробовал. Не понимаю, что не так

package com.javarush.test.level16.lesson13.bonus02;

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

/* Клубок
1. Создай 5 различных своих нитей c отличным от Thread типом:
1.1. нить 1 должна бесконечно выполняться;
1.2. нить 2 должна выводить "InterruptedException" при возникновении исключения InterruptedException;
1.3. нить 3 должна каждые полсекунды выводить "Ура";
1.4. нить 4 должна реализовать интерфейс Message, при вызове метода showWarning нить должна останавливаться;
1.5. нить 5 должна читать с консоли цифры пока не введено слово "N", а потом вывести в консоль сумму введенных цифр.
2. В статическом блоке добавь свои нити в List<Thread> threads в перечисленном порядке.
3. Нити не должны стартовать автоматически.
Подсказка: Нить 4 можно проверить методом isAlive()
*/

public class Solution {
    public static List<Thread> threads = new ArrayList<Thread>(5);

    static {
        threads.add(new Thread1());
        threads.add(new Thread2());
        threads.add(new Thread3());
        threads.add(new Thread4());
        threads.add(new Thread5());

    }

    public static class Thread1 extends Thread {

        @Override
        public void run() {
            while(true) {}
        }
    }


    public static class Thread2 extends Thread  {

        @Override
        public void run() {
            try {
                Thread.sleep(Integer.MAX_VALUE);
            } catch (InterruptedException e) {
                System.out.println("InterruptedException");
            }
        }
    }


    public static class Thread3 extends Thread {

        @Override
        public void run() {
            try {
                while(!Thread.interrupted()) {
                    System.out.println("Ура");
                    Thread.sleep(500);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }


    public static class Thread4 extends Thread  implements Message {

        @Override
        public void run() {

            while(!Thread.interrupted()) {}
        }

        @Override
        public void showWarning() {
            if (this.isAlive()) {
                this.interrupt();
            }
        }
    }


    public static class Thread5 extends Thread {
        private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        private int counter;

        @Override
        public void run() {
            String line;
            try {
                while(true) {
                    line = reader.readLine();
                    if (line.equals("N")) {
                        break;
                    }
                    counter += Integer.parseInt(line);
                    reader.close();
                }
                System.out.println(counter);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


1.1. нить 1 должна бесконечно выполняться;
Выполняется

1.2. нить 2 должна выводить «InterruptedException» при возникновении исключения InterruptedException;
Нить ждет в слипе, пока не будет прервана, потом выводит строку в консоль

1.3. нить 3 должна каждые полсекунды выводить «Ура»;
Каждые полсекунды выводится «Ура»

1.4. нить 4 должна реализовать интерфейс Message, при вызове метода showWarning нить должна останавливаться;
Интерфейс реализован. Нить выполняется пока мы не прервем эту нить.
В некоторых решениях я видел this.join(), но прямо говоря, я не понимаю, зачем здесь join(), да и на прохождение задачи эта запись не влияет

1.5. нить 5 должна читать с консоли цифры пока не введено слово «N», а потом вывести в консоль сумму введенных цифр.
Читает. Считает. Выводит
  • ,

package com.javarush.test.level15.lesson12.home01;

Программа работает в соответствии с условиями задачи, но не проходит проверку.

package com.javarush.test.level15.lesson12.home01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/* Разные методы для разных типов
1. Считать с консоли данные, пока не введено слово "exit".
2. Для каждого значения, кроме "exit", вызвать метод print. Если значение:
2.1. содержит точку '.', то вызвать метод print для Double;
2.2. больше нуля, но меньше 128, то вызвать метод print для short;
2.3. больше либо равно 128, то вызвать метод print для Integer;
2.4. иначе, вызвать метод print для String.
*/

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true)
        {
            String s = reader.readLine();
            if (s.equals("exit")) break;
            if (s.matches("[1-9]+"))
            {
                int a = Integer.parseInt(s);
                if (a > 0 && a < 128)
                {
                    print((short) a);
                } else if (a >= 128)
                {
                    print(a);
                }
            } else if (s.matches("\\d+\\.\\d+"))
            {
                print(Double.parseDouble(s));
            } else print(s);
        }

    }

    public static void print(Double value)
    {
        System.out.println("Это тип Double, значение " + value);
    }

    public static void print(String value)
    {
        System.out.println("Это тип String, значение " + value);
    }

    public static void print(short value)
    {
        System.out.println("Это тип short, значение " + value);
    }

    public static void print(Integer value)
    {
        System.out.println("Это тип Integer, значение " + value);
    }
}

Вопрос по задаче com.javarush.test.level18.lesson10.home06

Доброго времени суток! Возник вопрос по задаче. Решил таким способом (см. код). Вроде, все ок, но сервер не принимает. Можете навести на мысль? А то уже глаз замылился…

/* Встречаемость символов
Программа запускается с одним параметром - именем файла, который содержит английский текст.
Посчитать частоту встречания каждого символа.
Отсортировать результат по возрастанию кода ASCII (почитать в инете). Пример: ','=44, 's'=115, 't'=116
Вывести на консоль отсортированный результат:
[символ1]  частота1
[символ2]  частота2
Закрыть потоки. Не использовать try-with-resources

Пример вывода:
, 19
- 7
f 361
*/

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

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

        for (int i = 0; i < 128; i++)
            map.put(i, 0);

        FileInputStream fileInputStream = new FileInputStream(args[0]);

        while (fileInputStream.available()>0){
            int i = fileInputStream.read();
            int count = map.get(i);
            count++;
            map.put(i,count);
        }

        for (Map.Entry<Integer,Integer> el:map.entrySet())
            if(el.getValue()>0){
                int i = el.getKey();
                System.out.println((char)i + " " + el.getValue());
            }

        fileInputStream.close();
    }
}
  • ,

level07.lesson09.task04 У кого быстрее алгоритм работает? Конкурс.

Интересно, полагаю, будет посмотреть на самые быстродействующие алгоритмы решения этой задачи. Естественно, что число записей в списке должно быть таким, чтобы время выполнения программы на компьютере можно было бы легко вычислить. Так создадим единый список из ста тысяч строк и сравним время выполнения…

N.B.!
1. Согласно пункту 2.2. предложенной задачи: «удваивать все слова содержащие букву «л».», для единообразия станем так:

На входе:
роза
лира
лоза
ложка
коза
кора
коралл
сорока
носорог
финал

На выходе:
лира
лоза
лоза
ложка
ложка
коза
коралл
финал
финал


2. Список один и тот же, и хотя он формируется путем десяти тысячекратного повторения из десяти строк, считаем его случайным.
3. Срок самостоятельной публикации конкурсных вариантов решения этой задачи истекает 5 февраля 2017 года в 12 часов дня (время московское).
4. Каждый участник форума может самостоятельно оценить быстродействие предложенных вариантов на своем компьютере и поставить «плюсик» тому, кого он считает победителем в этом конкурсе."


/*
ТЕКСТ КОНКУРСНОЙ ЗАДАЧИ СО ВСЕМИ КОРРЕКТИРОВКАМИ ИСХОДНОЙ ЗАДАЧИ level07.lesson09.task04:
*/


/*

2. Метод fix должен:
2.1. удалять из списка строк все слова, содержащие букву «р»
2.2. удваивать все слова содержащие букву «л».
2.3. если слово содержит и букву «р» и букву «л», то оставить это слово без изменений.
2.4. с другими словами ничего не делать.
Пример:
роза
лира
лоза
ложка
коза
кора
коралл
сорока
носорог
финал
...
Выходные данные:
лира
лоза
лоза
ложка
ложка
коза
коралл
финал
финал
...
*/



import java.util.ArrayList;

public class ManipulationsWithTheList {

    public static void main(String[] args) throws Exception
    {
        long startTime = System.currentTimeMillis();

        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < 10000 ; i++) {
            list.add("роза");
            list.add("лира");
            list.add("лоза");
            list.add("ложка");
            list.add("коза");
            list.add("кора");
            list.add("коралл");
            list.add("сорока");
            list.add("носорог");
            list.add("финал");
        }

        list = fix(list);

        for (String s : list)
        {
            System.out.println(s);
        }

        long timeSpent = System.currentTimeMillis() - startTime;

        System.out.println("Эта программа выполнялась " + timeSpent + " миллисекунд.");
    }

    public static ArrayList<String> fix(ArrayList<String> list)
    {
        //напишите тут ваш код

    }
}


Дополнение от 31.01.2017
Уважаемые коллеги!
Настоятельно прошу еще раз ознакомиться со всеми условиями конкурсной задачи. Особо отмечу следующее:
на входе упорядоченная коллекция строк;
на выходе также должна быть упорядоченная коллекция строк (вывод её в консоль используется исключительно для визуального подтверждения верности произведенных манипуляций с исходной псевдослучайной коллекцией);
— сколько времени выполнялся метод fix, просьба, вывести в консоль дополнительно.

Ссылки на все конечные полные тексты программ участвующих в конкурсе будут находиться в самом первом сообщении темы. Просьба к участникам опубликовать их в своих сообщениях с пометкой: «НА КОНКУРС», чтобы я смог бы их собрать вместе и опубликовать.

Конкурсанты:
Torin текст программы содержит отклонения от конкурсной задачи
JuriMik текст программы
Javin текст программы
Himeg текст программы
Тестирование

Проводилось на:
Intel Core i7-2600 CPU @ 3.4 GHz x 4, RAM 16 GB

Windows 7 professional x64
JRE 1.8.0_121
IDE Eclipse Java EE IDE for Web Developers. Version: Neon.1a Release (4.6.1)

Linux Mint 17 Cinnamon 64-bit (v. 2.2.16) 3.13.0-24-generic
JRE 1.8.0_25
IDE Eclipse Java EE IDE for Web Developers. Version: Neon.2 Release (4.6.2)

Средние арифметические значения времени выполнения метода fix (в миллисекундах) подсчитывались по десяти попыткам:

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));
        String fileName1, fileName2, fileName3;
        fileName1 = reader.readLine();
        fileName2 = reader.readLine();
        fileName3 = reader.readLine();
        reader.close();

        FileInputStream inputStreamReader = new FileInputStream(fileName1);
        int available = inputStreamReader.available();
        byte[] read = new byte[available];
        int count = inputStreamReader.read(read);
        inputStreamReader.close();

        FileOutputStream fileOutputStream = new FileOutputStream(fileName2);
        fileOutputStream.write(read, 0, (int)Math.ceil(count/2.0));
        fileOutputStream.close();

        fileOutputStream = new FileOutputStream(fileName3);
        fileOutputStream.write(read, (int)Math.ceil(count/2.0),  count/2);
        fileOutputStream.close();
    }
}