level18.lesson10.bonus02 и level18.lesson10.bonus03 (Бредовый результат - принят валидатором) + ошибка сервера.

Для выполнения этих двух задач полезно почитать 16-ю главу Философия Джава, минимум до Writer и Reader.
Также можно почитать теорию 19-го уровня.
bouns02

Вот такой результат был принят. Печалька.
Сделал задачу со второго раза, переписав код с нуля.
1. Читал символы через FileReader в StringBuilder.
2. Из StringBuilder прочитать строки. Пример есть в лекциях.
3. Найти максимальный ID — творчество.
4. Обработать входные данные — творчество.
5. Дописать увеличенный ID и данные в конец файла. Я делал через FileWriter. При чем дописано без перевода на следующую строку.

Без блоков try-catch. Всё в теле main.

Ошибка сервера в моём случае — лишние файлы в папке.
bonus03 с параметрами -u 1984798 Шорты пляжные red 159.00 12

исходные данные


ну это же ни в какие ворота. и bonus03 с первого раза прошел… Печаль, печаль, печаль.

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

/* Прайсы
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается со следующим набором параметров:
-c productName price quantity
Значения параметров:
где id - 8 символов
productName - название товара, 30 chars (60 bytes)
price - цена, 8 символов
quantity - количество, 4 символа
-c  - добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины
String result = String.format("%n%-8d%-30.30s%-8.2f%-4d",id, strToAppend, Float.valueOf(args[args.length-2]), Integer.valueOf(args[args.length-1]));
Пример:
19846   Шорты пляжные синие           159.00  12
198478  Шорты пляжные черные с рисунко173.00  17
19847983Куртка для сноубордистов, разм10173.991234
*/

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        reader.close();
        InputStreamReader fileReader = new FileReader(fileName);
        StringBuilder stringBuilder = new StringBuilder();
        int count;
        while ((count = fileReader.read()) > -1)
        {
            stringBuilder.append((char) count);
        }
        fileReader.close();

        System.setIn(new ByteArrayInputStream(stringBuilder.toString().getBytes()));
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(isr);
        ArrayList<Integer> stringArrayList = new ArrayList<>();
        while (true)
        {
            String line = bufferedReader.readLine();
            if (line == null) break;
            else if (!line.isEmpty()) {
                stringArrayList.add(Integer.parseInt(line.substring(0,8).trim()));
            }
        }
        Collections.sort(stringArrayList);
        bufferedReader.close();
        isr.close();

        Integer maxIDplusOne = stringArrayList.get(stringArrayList.size() - 1)+1;
        if (maxIDplusOne.toString().length()<8) {
            stringBuilder.append(maxIDplusOne);
            for (int i = maxIDplusOne.toString().length(); i < 8; i++)
            {
                stringBuilder.append(" ");
            }
        } else stringBuilder.append(maxIDplusOne);
        String arguments = "";
        if (args[0].equals("-c")) {

            for (int i = 1; i < args.length-2; i++)
            {
                arguments += args[i] + " ";

            }
            if (arguments.length()>30)
            {
                arguments = arguments.substring(0,30);
            }
            else if (arguments.length() < 30)
            {
                for (int i = arguments.length(); i < 30; i++)
                arguments += " ";
            }
            if (args[args.length-2].length()<8)
            {
                arguments += args[args.length-2];
                for (int i = args[args.length-2].length(); i < 8; i++)
                    arguments += " ";
            } else arguments += args[args.length-2];
            if (args[args.length-1].length()<4)
            {
                arguments += args[args.length-1];
                for (int i = args[args.length-1].length(); i < 4; i++)
                    arguments += " ";
            } else arguments += args[args.length-1];
        }
        FileWriter fileWriter = new FileWriter(fileName);
        fileWriter.write(stringBuilder.append(new StringBuilder(arguments).toString()).toString());
        fileWriter.close();
    }
}


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

/* Прайсы 2
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id - 8 символов
productName - название товара, 30 chars (60 bytes)
price - цена, 8 символов
quantity - количество, 4 символа
-u  - обновляет данные товара с заданным id
-d  - производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id)

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины
String result = String.format("%n%-8d%-30.30s%-8.2f%-4d",id, strToAppend, Float.valueOf(args[args.length-2]), Integer.valueOf(args[args.length-1]));

Пример:
19846   Шорты пляжные синие           159.00  12
198478  Шорты пляжные черные с рисунко173.00  17
19847983Куртка для сноубордистов, разм10173.991234
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String fileName = reader.readLine();
            reader.close();
            InputStreamReader fileReader = new FileReader(fileName);
            StringBuilder stringBuilder = new StringBuilder();
            int count;
            while ((count = fileReader.read()) > -1) {
                stringBuilder.append((char) count);
            }
            fileReader.close();

            switch (args[0]) {
                case "-u": {
                    String arguments = "";
                    for (int i = 2; i < args.length-2; i++)
                    {
                        arguments += args[i] + " ";
                    }
                    String result = String.format("%n%-8.8s%-30.30s%-8.8s%-4.4s",args[1], arguments, args[args.length-2], args[args.length-1]);
                    Integer id = Integer.parseInt(args[1]);
                    FileWriter fileWriter = new FileWriter(fileName);
                    fileWriter.write(update(stringBuilder, id, result).toString());
                    fileWriter.close();
                }
                    break;
                case "-d": {
                    Integer id = Integer.parseInt(args[1]);
                    FileWriter fileWriter = new FileWriter(fileName);
                    fileWriter.write(delete(stringBuilder, id).toString());
                    fileWriter.close();
                }
                    break;
                default:
                    throw new Exception("wrong argument");
            }
        } catch (Exception e) {e.printStackTrace();}
    }
    private static StringBuilder delete(StringBuilder stringBuilder, Integer id) throws Exception{
        System.setIn(new ByteArrayInputStream(stringBuilder.toString().getBytes()));
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(isr);
        StringBuilder stringBuilderTemp = new StringBuilder();
        while (true) {
            String line = bufferedReader.readLine();
            if (line == null) break;
            else if (!line.isEmpty()) {
                Integer idx = Integer.parseInt(line.substring(0, 8).trim());
                if (!id.equals(idx)) stringBuilderTemp.append(line).append("\n");
            }
        }
        bufferedReader.close();
        isr.close();
        return stringBuilderTemp;
    }
    private static StringBuilder update(StringBuilder stringBuilder, Integer id, String result) throws Exception{
        System.setIn(new ByteArrayInputStream(stringBuilder.toString().getBytes()));
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(isr);
        StringBuilder stringBuilderTemp = new StringBuilder();
        while (true) {
            String line = bufferedReader.readLine();
            if (line == null) break;
            else if (!line.isEmpty()) {
                Integer idx = Integer.parseInt(line.substring(0, 8).trim());
                if (!id.equals(idx)) stringBuilderTemp.append(line).append("\n");
                else stringBuilderTemp.append(result).append("\n");
            }
        }
        bufferedReader.close();
        isr.close();
        return stringBuilderTemp;
    }
}
  • ,

Неизвестная ошибка при работе с сервером_РЕШЕНО

Добрый вечер.
При отправке решения задачи level18.lesson10.bonus02 возвращается «Неизвестная ошибка при работе с сервером». После переустановки Idea и плагина, результат — ноль.
Получил задачу заново из списка заданий в плагине, отправил пустое решение, но, вместо «Задача не прошла тестирование», та же «Неизвестная ошибка при работе с сервером».
При решении level18.lesson10.bonus03 сперва отправил задачу без решения, чтобы проверить адекватность ответа сервера, в результате «Задача не прошла тестирование». Но, при попытке отправить решение, сервер возвращает «Неизвестная ошибка при работе с сервером». Откат задачи в начальное состояние не помогает. Теперь два бонуса никак не могу проверить.
Может кто-нибудь сталкивался с этой проблемой, посоветуйте как с этим бороться.

level35.lesson10.bonus01 неизвестная ошибка

Друзья, нужная помощь!
Решаю задачу level35.lesson10.bonus01 и столкнулся с неожиданным поведением.
При проверке решения выдается ошибка «Неизвестная ошибка при работе с сервером».
Сначала грешил на левые пакете в импорте, но попробовав отправить неизменный код(то есть задачу в том виде в котором ее мне выдали), мне выдалась та же ошибка.
Остальные задачи нормально отрабатывают. Пробовал шаманство в виде invalidate cache, не помогло.
Я в недоумении, что я делаю не так?
  • ,

Большие задачи уровня 30 и 31 (а возможно и другие)

Добрый вечер.
Неприятный момент. Когда решал задачу с чатом на уровне 30, решил все части, включая последнюю. Чат работал, но при проверке IDEA зависала. Сначала я завершал процесс и перезапускал, попытка проверки снова вешала ИДЕЮ. Решил подождать, оказалось, минут через 40 она перестает висеть и выдает это сообщение:



Расстроился, но писать не стал. Подумал, пойду дальше, главное, что программа работает.
Прошел весь следующий уровень (31-й), все задачи нормально проверялись, как обычно, прорешал задачу про архиватор, тоже нормальная проверка у всех подзадач — если правильно, проходит, если что-то не так — «программа не прошла тестирование». А сегодня, после того, как сделал последнюю часть этой задачи (и программа нормально работает), та же фигня: при попытке проверки IDEA вешается почти на час и выдает «неизвестную ошибку при работе с сервером».

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

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