task.task18.task1827

Коллеги! Объясните мне тупому почему не принимает валидатор мое решение. Кто решил — скиньте пожалуйста свое решение на vik.piter@gmail.com
Программа все делает правильно… но не принимает!
Уже не могу сидеть на этом задании…

Прайсы


CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.

Программа запускается со следующим набором параметров:
-c productName price quantity

Значения параметров:
где id — 8 символов.
productName — название товара, 30 chars (60 bytes).
price — цена, 8 символов.
quantity — количество, 4 символа.

-c — добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле.

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity

Данные дополнены пробелами до их длины.

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

Требования:
1. Программа должна считать имя файла для операций CrUD с консоли.
2. При запуске программы без параметров список товаров должен остаться неизменным.
3. При запуске программы с параметрами "-c productName price quantity" в конец файла должна добавится новая строка с товаром.
4. Товар должен иметь следующий id, после максимального, найденного в файле.
5. Форматирование новой строки товара должно четко совпадать с указанным в задании.
6. Созданные для файлов потоки должны быть закрыты.

package com.javarush.task.task18.task1827;

/* 
Прайсы
*/

import java.io.*;
import java.nio.Buffer;
import java.util.ArrayList;

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

        if (args[0].equals("-c") && args.length == 4) {


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

            // получаем параметры для прибавления

            String productName = args[1];
            if (productName.length() > 30) {
                productName = args[1].substring(0, 29);
            } else {
                while ((30 - productName.length()) != 0) {
                    productName += " ";
                }
            }

            String price = args[2];
            if (price.length() > 8) {
                price = args[2].substring(0, 7);
            } else {
                while ((8 - price.length()) != 0) {
                    price += " ";
                }
            }

            String quantity = args[3];
            if (quantity.length() > 4) {
                quantity = args[3].substring(0, 3);
            } else {
                while ((4 - quantity.length()) != 0) {
                    quantity += " ";
                }
            }

            // нашли id который надо прибавить
            FileReader fileReader = new FileReader(fileName);
            StringBuilder sb = new StringBuilder();
            while (fileReader.ready()) {
                sb.append((char) fileReader.read());
            }
            fileReader.close();

            String sub2parse = sb.toString().substring(sb.toString().length() - 50, sb.toString().length() - 42);

            StringBuilder sb2 = new StringBuilder();

            Integer t;
            for (char c : sub2parse.toCharArray()) {
                t = Integer.parseInt(String.valueOf©);
                if (t instanceof Integer) {


                }

                if (c != ' ') {
                    sb2.append©;
                }
            }


            double id = Double.parseDouble(sb2.toString());


            if (id < 99999999) {
                id++;
            }

            // добавили к id нужные пробелы
            String idString = Double.toString(id);
            if (idString.length() < 8) {
                while ((8 - idString.length()) != 0) {
                    idString += " ";
                }
            }

            // генерим нашу выстраданную строчку
            String string = idString + productName + price + quantity;

            // считываем все в массив
            BufferedReader br = new BufferedReader(new FileReader(fileName));
            ArrayList<String> ss = new ArrayList<String>();
            while (br.ready()) {
                ss.add(br.readLine());
            }
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
            for (String str : ss) {
                bw.write(str);
            }
            bw.write(string);
            bw.close();


        }
    }
}

2 комментария

vladkloch777
Добрый день, нужно записывать с новой строки данные, у вас получается нет переноса каретки.
А вообще ругается на какие пункты?
vampirit
String.substring (int start, int end)

end — это последний символ, который не включается в подстроку =) т.е. не 29, а 30
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.