Смотритель: hubert

Как в новом плагине загружать задачи без сброса прогресса?

В старом плагине, насколько я помню, при открытии уже решённой задачи, решение не пропадало. Сейчас сразу же предупреждение при открытии, что файлы будут сброшены. Можно как-то вернуть на старый вариант? Сейчас получается, что нельзя посмотреть своё же решение. Закрыл задачу, потом открыл и решение сброшено.

  • ,

task32.task3210 или очередная бяка валидатора.

Уже невозможно просто бороться с валидатором, но может я всё-таки где-то не прав?
Условие:
Используем RandomAccessFile

В метод main приходят три параметра:
1) fileName — путь к файлу;
2) number — число, позиция в файле;
3) text — текст.

Считать текст с файла начиная с позиции number, длинной такой же как и длинна переданного текста в третьем параметре.

Если считанный текст такой же как и text, то записать в конец файла строку ‘true‘, иначе записать ‘false‘.
Используй RandomAccessFile и его методы seek(long pos), read(byte b[], int off, int len), write(byte b[]).
Используй convertByteToString(byte readBytes[]) для конвертации считанной строчки в текст
.

Вот мой код:
public class Solution {
public static void main(String... args) throws IOException {
    RandomAccessFile file=new RandomAccessFile(args[0],"rw");
    int n=Integer.parseInt(args[1]);
    file.seek(n);
    String text=args[2];
    byte[] fileText=new byte[(int)file.length()];
    file.read(fileText,0,text.length());
    file.seek(file.length());
    String shoudBeWritten="";
    if(convertByteToString(fileText).equals(text))shoudBeWritten="true";
    else if(!convertByteToString(fileText).equals(text))shoudBeWritten="false";
    file.writeChars(shoudBeWritten);
    file.close();
}
private static String convertByteToString(byte readBytes[]){
    return String.valueOf(readBytes);
}
}

task21.task2104

Задача решена!!! 
Хочу уточнить пару возникших вопросов.
1) Почему при создании нового объекта Solution вызывается метод hashCode()?
   Хотя фактически нет указаний на его вызов.
2) Мы вызываем метод contains(), а исполняется метод equals() ?



public class Solution {
    private final String first, last;

    public Solution(String first, String last) {
        this.first = first;
        this.last = last;
    }

    @Override
    public boolean equals(Object o) {
          *************
            }

    @Override
    public int hashCode() {
        ***************
    }

    public static void main(String[] args) {
        Set<Solution> s = new HashSet<>();
        s.add(new Solution("Donaldadd", "Duckfff"));
        System.out.println(s.contains(new Solution("Donald", "Duck")));
    }
}
  • ,

task01.task0134 - не проходит на корректном решении

public static long getVolume(final int a, final int b, final int c) {
        return 1000 * a * b * c;
    }

Решение выше принимается как верное, но если результат перемножения больше int — ответ получается не правильный.
public static long getVolume(final int a, final int b, final int c) {
        return 1000L * a * b * c;
    }

А это решение не принимается.

P.S.: проблема была актуальна на момент конца февраля.
  • ,

com.javarush.task.task19.task1918 - Все сделано простыми базовыми функциями

НЕ проходит валидацию :( что его беспокоит?

Все сделано простыми базовыми функциями (без Map, Stack и даже массивов), решение за один проход, вложенность тегов «ЗА» общим тегом решена рекурсией.

На мой взгляд все очень компактно и складно.

public static void getOuter(String html, String tag) {

int startPosition = 0;
int openTags = 0;
int firstOpenTag = 0;
int secondOpenTag = 0;
int secondCloseTag = 0;

while (html.indexOf(tag, startPosition) > 0) {
int pos = html.indexOf(tag, startPosition);
if ("<".equals(html.substring(pos — 1, pos))) {
++openTags;
if (openTags == 1)
firstOpenTag = pos;
else if (openTags == 2)
secondOpenTag = pos;
}
if ("/".equals(html.substring(pos — 1, pos))) {
if (openTags == 2)
secondCloseTag = pos;
--openTags;
}
startPosition = pos + 1;

if (openTags == 0) {
System.out.println(html.substring(firstOpenTag — 1, startPosition + tag.length()));
if ((secondCloseTag — secondOpenTag) != 0) {
getOuter(html.substring(secondOpenTag — 1, secondCloseTag + tag.length() + 1), tag);
secondOpenTag = secondCloseTag = 0;
}
}
}
}
  • ,

task35.task3513 задание 12 (игра 2048)

Приветствую. Не получается правильно реализовать функцию сэйва и вследствие этого функцию «отмена последнего действия».
Вот условие этого уровня + предыдущего:


2048 (12)

Ну что, попробуем наш алгоритм в действии? Осталось добавить сохранение игрового состояния в начало каждого метода движения, а также еще один кейс для обработки клавиши, которой будем выполнять отмену последнего хода. При сохранении текущего состояния в стек, обрати внимание на то, чтобы всегда сохранялось актуальное состояние и только однажды. Если ты послушал мой совет и реализовал методы right, up, down с помощью поворотов и вызова метода left, можешь использовать следующий подход:

В самом начале методов right, up, down вызываем метод saveState с gameTiles в качестве параметра.

В методе left организуем проверку того, вызывался ли уже метод saveState. За это у нас отвечает флаг isSaveNeeded, соответственно, если он равен true, выполняем сохранение. После выполнения сдвига влево устанавливаем флаг isSaveNeeded равным true. Также добавим в метод keyPressed класса Controller вызов метода rollback по нажатию на клавишу Z (код — KeyEvent.VK_Z).

2048 (11) Отличная работа! На этом этапе у нас уже есть полнофункциональное приложение, но ведь нет предела совершенству, давай еще поработаем. Если ты успел какое-то время поиграть в 2048, то заметил, что порой очень хочется иметь возможность отменить последний ход. Давай создадим в классе Model два стека, в одном будем хранить предыдущие состояния игрового поля, а в другом предыдущие счета. Назовем их previousStates и previousScores. Инициализировать можешь прямо в строке объявления или в конструкторе. Используй стандартную реализацию стека (java.util.Stack). Добавим boolean поле isSaveNeeded = true, оно нам понадобится в будущем.

Хранилище состояний у нас есть, теперь реализуем два метода для работы с ними.

Приватный метод saveState с одним параметром типа Tile[][] будет сохранять текущее игровое состояние и счет в стеки с помощью метода push и устанавливать флаг isSaveNeeded равным false.

Публичный метод rollback будет устанавливать текущее игровое состояние равным последнему находящемуся в стеках с помощью метода pop. Обрати внимание на то, что при сохранении массива gameTiles необходимо создать новый массив и заполнить его новыми объектами типа Tile перед сохранением в стек. В методе rollback достаточно просто выполнить присваивание (gameTiles = previousStates.pop()) и то же для счета, нет необходимости в глубоком копировании. Перед восстановлением игрового состояния с помощью метода rollback не забудь проверить что стеки не пусты, чтобы избежать возникновения исключения EmptyStackException.


Вот мой код.
public class Model {
    private static final int FIELD_WIDTH = 4;
    private Tile[][] gameTiles;
    int score,maxTile;
    private boolean isSaveNeeded = true;
    private Stack<Tile[][]> previousStates=new Stack<>();
    private Stack<Integer> previousScores=new Stack<>();



    public Model() {

        resetGameTiles();
    }
    public boolean canMove() {
        if(!getEmptyTiles().isEmpty())
            return true;
        for(int i = 0; i < gameTiles.length; i++) {
            for(int j = 1; j < gameTiles.length; j++) {
                if(gameTiles[i][j].value == gameTiles[i][j-1].value)
                    return true;
            }
        }
        for(int j = 0; j < gameTiles.length; j++) {
            for(int i = 1; i < gameTiles.length; i++) {
                if(gameTiles[i][j].value == gameTiles[i-1][j].value)
                    return true;
            }
        }
        return false;
    }

    public Tile[][] getGameTiles() {
        return gameTiles;
    }

    private ArrayList<Tile> getEmptyTiles(){
        ArrayList<Tile> emptyTiles=new ArrayList<>();
        for (int m = 0; m < FIELD_WIDTH ; m++) {
            for (int n = 0; n <FIELD_WIDTH ; n++) {
                if(gameTiles[m][n].value==0)emptyTiles.add(gameTiles[m][n]);
            }
        }
        return emptyTiles;
    }
    public void rotateToRight(){
        for (int k=0; k<FIELD_WIDTH/2; k++)
        {
            for (int j=k; j<FIELD_WIDTH-1-k; j++)
            {
                Tile tmp = gameTiles[k][j];
                gameTiles[k][j]  = gameTiles[j][FIELD_WIDTH-1-k];
                gameTiles[j][FIELD_WIDTH-1-k] = gameTiles[FIELD_WIDTH-1-k][FIELD_WIDTH-1-j];
                gameTiles[FIELD_WIDTH-1-k][FIELD_WIDTH-1-j] = gameTiles[FIELD_WIDTH-1-j][k];
                gameTiles[FIELD_WIDTH-1-j][k]  = tmp;
            }
        }

    }
    private void saveState(Tile[][] tiles){
        Tile[][] bufTiles=new Tile[FIELD_WIDTH][FIELD_WIDTH];
        for (int i = 0; i < tiles.length; i++) {
            for (int j = 0; j < tiles[i].length; j++) {
                bufTiles[i][j]=tiles[i][j];
                bufTiles[i][j].value=tiles[i][j].value;
            }
        }
        previousStates.push(bufTiles);
        previousScores.push(this.score);
        isSaveNeeded=false;
    }
    public void rollback(){
        if(!previousScores.isEmpty()&&!previousStates.isEmpty()) {
            gameTiles = previousStates.pop();
            score=previousScores.pop();

        }
    }

    public void right(){
        saveState(this.gameTiles);
        rotateToRight();
        rotateToRight();
        left();
        rotateToRight();
        rotateToRight();
    }
    public void up(){
        saveState(this.gameTiles);
        rotateToRight();
        left();
        rotateToRight();
        rotateToRight();
        rotateToRight();
    }
    public void down(){
        saveState(this.gameTiles);
        rotateToRight();
        rotateToRight();
        rotateToRight();
        left();
        rotateToRight();
    }

    public void left(){
        if(isSaveNeeded)saveState(this.gameTiles);
        boolean isChanged = false;
        for (int i = 0; i < FIELD_WIDTH; i++) {
            if (compressTiles(gameTiles[i]) | mergeTiles(gameTiles[i])) {
                isChanged = true;
            }
        }
        isSaveNeeded=true;
        if (isChanged) addTile();
    }

    private void addTile(){
        ArrayList<Tile> emptyTiles=getEmptyTiles();
        if(!emptyTiles.isEmpty()) {
            Tile randomEmptyTile = emptyTiles.get((int) (emptyTiles.size() * Math.random()));
            randomEmptyTile.value = Math.random() < 0.9 ? 2 : 4;
        }
    }
    private boolean compressTiles(Tile[] tiles){
        boolean isChanged=false;
        for (int i = 1; i < tiles.length; i++) {
            for (int j = 1; j < tiles.length; j++) {
                if (tiles[j - 1].isEmpty() && !tiles[j].isEmpty()) {
                    tiles[j - 1] = tiles[j];
                    tiles[j] = new Tile();
                    isChanged=true;
                }
            }
        }
        return isChanged;
    }
    private boolean mergeTiles(Tile[] tiles){
        boolean isChanged=false;
        for (int i = 1; i < tiles.length; i++) {
            if ((tiles[i - 1].value == tiles[i].value) && !tiles[i - 1].isEmpty() && !tiles[i].isEmpty()) {

                tiles[i - 1].value *= 2;
                if(tiles[i-1].value>maxTile){
                    maxTile = tiles[i-1].value;
                }
                score += tiles[i - 1].value;
                tiles[i] = new Tile();
                isChanged=true;
                compressTiles(tiles);
            }
        }
        return isChanged;
    }


    public void resetGameTiles(){

        gameTiles=new Tile[FIELD_WIDTH][FIELD_WIDTH];
        for (int m = 0; m < FIELD_WIDTH ; m++) {
            for (int n = 0; n <FIELD_WIDTH ; n++) {
                gameTiles[m][n]=new Tile();
            }
        }
        score=0;
        maxTile=2;
        addTile();
        addTile();

    }
}
  • ,

task33.task3310 - Задание 10.

Shortener (10)


Создай и реализуй класс FileStorageStrategy. Он должен:
10.1. Реализовывать интерфейс StorageStrategy.
10.2. Использовать FileBucket в качестве ведер (англ. bucket).
Подсказка: класс должен содержать поле FileBucket[] table.
10.3. Работать аналогично тому, как это делает OurHashMapStorageStrategy, но удваивать количество ведер не когда количество элементов size станет больше какого-то порога, а когда размер одного из ведер (файлов) стал больше bucketSizeLimit.
10.3.1. Добавь в класс поле long bucketSizeLimit.
10.3.2. Проинициализируй его значением по умолчанию, например, 10000 байт.
10.3.3. Добавь сеттер и геттер для этого поля.
10.4. При реализации метода resize(int newCapacity) проследи, чтобы уже не нужные файлы были удалены (вызови метод remove()).
Проверь новую стратегию в методе main(). Учти, что стратегия FileStorageStrategy гораздо более медленная, чем остальные. Не используй большое количество элементов для теста, это может занять оооочень много времени.
Запусти программу и сравни скорость работы всех 3х стратегий.

Требования:
1. Класс FileStorageStrategy должен поддерживать интерфейс StorageStrategy.
2. В классе FileStorageStrategy должны быть созданы все необходимые поля (согласно условию задачи).
3. Методы интерфейса StorageStrategy должны быть реализованы в FileStorageStrategy таким образом, чтобы обеспечивать корректную работу Shortener созданного на его основе.

Последнее требование ни в какую не хочет выполняться.
Да и второе зачлось только когда добавил некое мифическое поле (о котором нигде ни слова кроме как на help.javarush.ru) private long maxBucketSize
Перечитал все вопросы по этой подзадаче тут и на help.javarush.ru. Прошелся поиском по github-у (не нашел ни одного коммита решенной задачи для новой версии).

package com.javarush.task.task33.task3310.strategy;

import java.util.Objects;
import java.util.stream.IntStream;

public class FileStorageStrategy implements StorageStrategy {
    private static final int DEFAULT_INITIAL_CAPACITY = 16;
    private static final long DEFAULT_BUCKET_SIZE_LIMIT = 10000;
    private FileBucket[] table = new FileBucket[DEFAULT_INITIAL_CAPACITY];

    private long bucketSizeLimit = DEFAULT_BUCKET_SIZE_LIMIT;
    private int size;
    private long maxBucketSize;

    public FileStorageStrategy() {
        for (int i = 0; i < table.length; i++) {
            table[i] = new FileBucket();
        }
    }

    public long getBucketSizeLimit() {
        return bucketSizeLimit;
    }

    public void setBucketSizeLimit(final long bucketSizeLimit) {
        this.bucketSizeLimit = bucketSizeLimit;
    }

    public int getSize() {
        return size;
    }

    public long getMaxBucketSize() {
        return maxBucketSize;
    }

    private int hash(int h) {
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }

    private int indexFor(final int hash, final int length) {
        return hash & (length - 1);
    }

    private Entry getEntry(final Long key) {
        final int hash = (key == null) ? 0 : hash(key.hashCode());
        final int index = indexFor(hash, table.length);

        for (Entry e = table[index].getEntry(); e != null; e = e.next) {
            final Long eKey = e.key;
            if (e.hash == hash && Objects.equals(key, eKey))
                return e;
        }
        return null;
    }

    private void resize(final int newCapacity) {
        final FileBucket[] newTable = IntStream
                .range(0, newCapacity)
                .mapToObj(i -> new FileBucket())
                .toArray(FileBucket[]::new);
        transfer(newTable);
        table = newTable;
        maxBucketSize = 0;
        for (final FileBucket bucket : table) {
            final long currentBucketSize = bucket.getFileSize();
            maxBucketSize = currentBucketSize > maxBucketSize ? currentBucketSize : maxBucketSize;
        }
    }

    private void transfer(final FileBucket[] newTable) {
        for (final FileBucket bucket : table) {
            Entry e = bucket.getEntry();
            while (e != null) {
                final Entry next = e.next;
                final int index = indexFor(e.hash, newTable.length);
                e.next = newTable[index].getEntry();
                newTable[index].putEntry(e);
                e = next;
            }
            bucket.remove();
        }
    }

    private void addEntry(final int hash, final Long key, final String value, final int bucketIndex) {
        final Entry e = table[bucketIndex].getEntry();
        table[bucketIndex].putEntry(new Entry(hash, key, value, e));
        size++;

        final long currentBucketSize = table[bucketIndex].getFileSize();
        maxBucketSize = currentBucketSize > maxBucketSize ? currentBucketSize : maxBucketSize;
        if (maxBucketSize > bucketSizeLimit) resize(2 * table.length);
    }

    private void createEntry(final int hash, final Long key, final String value, final int bucketIndex) {
        table[bucketIndex].putEntry(new Entry(hash, key, value, null));
        size++;
        final long currentBucketSize = table[bucketIndex].getFileSize();
        maxBucketSize = currentBucketSize > maxBucketSize ? currentBucketSize : maxBucketSize;
    }

    @Override
    public boolean containsKey(final Long key) {
        return getEntry(key) != null;
    }

    @Override
    public boolean containsValue(final String value) {
        for (final FileBucket bucket : table) {
            for (Entry e = bucket.getEntry(); e != null; e = e.next) {
                if (Objects.equals(e.value, value))
                    return true;
            }
        }
        return false;
    }

    @Override
    public void put(final Long key, final String value) {
        final int hash = (key == null) ? 0 : hash(key.hashCode());
        final int index = indexFor(hash, table.length);

        if (table[index].getEntry() != null) {
            for (Entry e = table[index].getEntry(); e != null; e = e.next) {
                if (e.hash == hash && Objects.equals(e.key, key)) {
                    e.value = value;
                    return;
                }
            }
            addEntry(hash, key, value, index);
        } else {
            createEntry(hash, key, value, index);
        }
    }

    @Override
    public Long getKey(final String value) {
        for (final FileBucket bucket : table) {
            for (Entry e = bucket.getEntry(); e != null; e = e.next) {
                if (Objects.equals(e.value, value))
                    return e.key;
            }
        }
        return null;
    }

    @Override
    public String getValue(final Long key) {
        final Entry e = getEntry(key);
        return e == null ? null : e.value;
    }
}

Java Core, 5 уровень, 12 лекция, Задача: Факториал

День добрый господа.

Описание задачи:
Написать метод, который вычисляет факториал — произведение всех чисел от 1 до введенного числа включая его.
Пример: 4! = factorial(4) = 1*2*3*4 = 24
1. Ввести с консоли число меньше либо равно 150.
2. Реализовать функцию factorial.
3. Если введенное число меньше 0, то вывести 0.
0! = 1

Собственно мой код:

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            int input = Integer.parseInt(reader.readLine());
            reader.close();
            if (input <= 150)
                System.out.println(factorial(input));
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

    public static String factorial(int n) {
        if (n == 0) return "1";
        else if (n < 0) return "0";

        return "" + (n * Integer.parseInt(factorial(n - 1)));
    }
}


Результаты выполнения:
-413
0

0
1

4
24

При отправке задания, прилетают ошибки валидации:
1. Программа должна выводить на экран факториал введенного числа.
2. Метод factorial должен возвращать строковое представление факториала числа переданного ему в качестве параметра.

Ну и мой вопрос — WTF?

UPD 26.04.2017: Вопрос снят. При вводе 150 на выходе имеем 0.

com.javarush.task.task18.task1827 один пункт не проходит проверку


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

            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String strfile = reader.readLine();
            reader.close();

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

            BufferedReader fileread = new BufferedReader(new FileReader(strfile));
            String fileStr;
            while ((fileStr=fileread.readLine()) != null) {
                list.add(fileStr);
                int id = Integer.parseInt(fileStr.substring(0, 8).trim());
                if (id > idMax) idMax = id;
            }
            fileread.close();

            list.add(StrokaZapisi(args));

            BufferedWriter filewrite = new BufferedWriter(new FileWriter(strfile));
            for (int i=0; i< list.size(); i++) {
                if (i==list.size()-1) filewrite.write(list.get(i));
                else filewrite.write(list.get(i)+"\n");
            }
            filewrite.close();
    }

    static String Space(String stroka, int dlina){

        String space ="";
        int countSpace = dlina - stroka.length();
        for (int i=0; i< countSpace; i++) {
            space = space+" ";
        }
        return stroka = stroka+space;
    }
// формирование строки для записи в файл из аргументов командной строки
    static String StrokaZapisi (String[] args) {
        
        String name="";
        for(int i=1; i < args.length-2;i++) name=name+args[i]+" ";
        name = name.trim();
        if (name.length() > 30) name = name.substring(0, 30); else name = Space(name, 30);

        String price = args[args.length-1].trim();
        if (price.length() > 8) price = price.substring(0, 8); else price = Space(price, 8);

        String quantity = args[args.length-2].trim();
        if (quantity.length() > 4) quantity = quantity.substring(0, 4); else quantity = Space(quantity, 4);

        idMax++;
        String idMaxStr = String.valueOf(idMax);
        if (idMaxStr.length()>8) idMaxStr = idMaxStr.substring(0,8); else idMaxStr = Space(idMaxStr,8);
        String zapis = idMaxStr + name + price + quantity;

        return zapis;

    }
}

Подскажите в чём дело, целый день убит на решение этой задачи, 100500 раз всё переписано и подогнано под требования. Не проходит хоть тресни пункт «Форматирование новой строки товара должно четко совпадать с указанным в задании.» Чего не так не пойму.
Вывод в файле:

19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
123456 Куртка для сноубордистов, разм10173.991234
198479**Майка ростовка 170************12******2.1*
Вставляется последняя строчка, для удобства просмотра вместо пробелов "*". А так пробелу как по заданию.

task21.task2101 обсуждение кода

Уважаемые Java-кодеры!
Несколько дней тому назад, я вложил топик к данной задаче, в надежде получить от Вас
несколько дельных советов по ее решению.
Ваша вежливость не имеет границ, и я понял, что до этого уровня дошли единицы и то которые 
кодят по наитию. Про "сеньоров" с сайта вообще молчу.
Поэтому выкладываю код, прошедший валидацию.
Прошу дать комментарии по поводу его улучшения.
PS. Часть кода удалена, для соблюдения условий сайта. 

package com.javarush.task.task21.task2101;

/* 
Определяем адрес сети
*/
public class Solution {
    public static void main(String[] args) {
        byte[] ip = new byte[]{(byte) 192, (byte) 168, 1, 2};
        byte[] mask = new byte[]{(byte) 255, (byte) 255, (byte) 254, 0};
        byte[] netAddress = getNetAddress(ip, mask);
        print(ip);          //11000000 10101000 00000001 00000010
        print(mask);        //11111111 11111111 11111110 00000000
        print(netAddress);  //11000000 10101000 00000000 00000000

    }

    public static byte[] getNetAddress(byte[] ip, byte[] mask)
    {

        byte[] bytes =new byte[]{(byte) (ip[0]& mask[0]),(byte) (ip[1]& mask[1]),(byte) (ip[2]& mask[2]),(byte) (ip[3]& mask[3])};


        return bytes;
    }

    public static void print(byte[] bytes) {
        String stroka ="";

        for (int i = 0; i < bytes.length;i++)//  извлекаем данные из массива
        {
                String PaketString = Integer.toBinaryString((bytes[i])); // переводим  в бинарное отображение
                                                                            // 2 >>> 10
                                                                            // -64 >>> 11111111111111111111111111111000000
             int rang = 8 - PaketString.length(); // определяем разрядность массива

                if (rang > 0)// условие необходимости дополнить строку до 8 разрядов  прим 10 >>>> 00000010
                {

                    String razrmer = "0";
                    String razrmerPaket = "";


                        for (int j = 0; j < rang; j++)// цикл дополнения разряда "0"
                        {
                            razrmerPaket = razrmerPaket + razrmer;// формирование пустых разрядов
                        }

                    PaketString = razrmerPaket+PaketString;// создание пакета строки в правилином формате

                }
                    if (rang < 0)// проверка на условие лишних разрядов в строке прим 100000010 >>> 00000010
                    {
                      PaketString = PaketString.substring(PaketString.length()-8,PaketString.length()); // удаление значений лишних разрядов

                    }

                    stroka =stroka+" "+ PaketString;// правильной маски формата адресов

        }
       ***********************************// удаление лишнего пробела в 0 разряде строки
        System.out.println(********);

    }
}
  • ,

com.javarush.task.task18.task1825 Работает, не проходит тестирование

Код рабочий, проверял. Пишет, что у меня не выполнено ни одно условие кроме 1-го

package com.javarush.task.task18.task1825;

/* 
Собираем файл
Собираем файл из кусочков.
Считывать с консоли имена файлов.
Каждый файл имеет имя: [someName].partN.
Например, Lion.avi.part1, Lion.avi.part2, …, Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом «end«.
В папке, где находятся все прочтенные файлы, создать файл без суффикса [.partN].
Например, Lion.avi.
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, …, в конце — последнюю.
Закрыть потоки.
Требования:
1. Программа должна считывать имена файлов с консоли, пока не будет введено слово "end".
2. Создай поток для записи в файл без суффикса [.partN] в папке, где находятся все считанные файлы.
3. В новый файл перепиши все байты из файлов-частей *.partN.
4. Чтение и запись должны происходить с использованием буфера.
5. Созданные для файлов потоки должны быть закрыты.
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<File> list = new ArrayList<>();
        while (true) {
            String name = reader.readLine();
            if (!name.equals("end"))
            list.add(new File(name));
            else break;
        }
/*Названия одинаковые, соответственно сортировка листа работает корректно от part1 до partN */
        Collections.sort(list);
        //файл создается в папке с предыдущими файлами
        String resultFile = list.get(0).getAbsolutePath().split(".part")[0] + "";
        File destFile = new File(resultFile);
        destFile.createNewFile();
        FileOutputStream outStream = new FileOutputStream(destFile);
//записывает все буфером
        for (File search : list) {
            FileInputStream inStream = new FileInputStream(search);
            byte[] buffer = new byte[inStream.available()];
            while (inStream.available() > 0) {
                int count = inStream.read(buffer);
                outStream.write(buffer,0,count);
            }
            inStream.close();
        }
        outStream.close();
        reader.close();
    }
}


Ввод:

*C:My programsCodingJavaRushTasks2.JavaCoresrccomjavarushtasktask18task1825avi.part3

C:My programsCodingJavaRushTasks2.JavaCoresrccomjavarushtasktask18task1825avi.part1

C:My programsCodingJavaRushTasks2.JavaCoresrccomjavarushtasktask18task1825avi.part2

end*

Вывод: (создается файл «avi» который содержит инфу 1,2,3 файлов в этой последовательности) «OneTwoThree»
  • ,

task30.task3008 Чат(19)

не могу понять, в чем проблема, все работает как надо, но валидатор не принимает условие «Метод processIncomingMessage должен выводить на экран полученное сообщение message.»

public class BotClient extends Client {

public static void main(String[] args){
BotClient botClient = new BotClient();
botClient.run();
}
@Override
protected String getUserName() {

String botName = «date_bot_» + ((int)(Math.random()*100));
return botName;
}

@Override
protected boolean shouldSendTextFromConsole() {
return false;
}

@Override
protected SocketThread getSocketThread() {
return new BotSocketThread();
}

public class BotSocketThread extends Client.SocketThread{
@Override
protected void clientMainLoop() throws IOException, ClassNotFoundException {
sendTextMessage(«Привет чатику. Я бот. Понимаю команды: дата, день, месяц, год, время, час, минуты, секунды.»);
super.clientMainLoop();
}

@Override
protected void processIncomingMessage(String message) {

ConsoleHelper.writeMessage(message);

String[] messageSplit = message.split(": ");
String result = «Информация для » + messageSplit[0]+ ": ";
Calendar cal = Calendar.getInstance();

switch (messageSplit[1].trim()){
case «дата»:
result += new SimpleDateFormat(«d.MM.YYYY»).format(cal.getTime());
sendTextMessage(result);
break;
case «день»:
result += new SimpleDateFormat(«d»).format(cal.getTime());
sendTextMessage(result);
break;
case «месяц»:
result += new SimpleDateFormat(«MMMM»).format(cal.getTime());
sendTextMessage(result);
break;
case «год»:
result += new SimpleDateFormat(«YYYY»).format(cal.getTime());
sendTextMessage(result);
break;
case «время»:
result += new SimpleDateFormat(«H:mm:ss»).format(cal.getTime());
sendTextMessage(result);
break;
case «час»:
result += new SimpleDateFormat(«H»).format(cal.getTime());
sendTextMessage(result);
break;
case «минуты»:
result += new SimpleDateFormat(«m»).format(cal.getTime());
sendTextMessage(result);
break;
case «секунды»:
result += new SimpleDateFormat(«s»).format(cal.getTime());
sendTextMessage(result);
break;
}

}
}
}