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 Данные дополнены пробелами до их длины.

Пример:

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

import java.io.*;
    import java.util.ArrayList;
    public class Solution {
    static String result = "";
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String file = reader.readLine();
        reader.close();
        if (args.length==0 || args.length<4) return;
        if (args[0].equals("-c")){
            String new_id = makeId(file);
            String new_product = makeProduct(args[1]);
            String new_price = makePrice(args[2]);
            String new_quantity = makeQuantity(args[3]);
            result = new_id + new_product + new_price + new_quantity;
            FileWriter writer = new FileWriter(file,true);
            writer.write("\r\n" + result);
            writer.close();
        }
    }
    public static String makeId(String file)throws IOException{
        ArrayList<Integer> list = new ArrayList<Integer>();
        FileReader fr = new FileReader(file);
        BufferedReader reader = new BufferedReader(fr);
        String line = reader.readLine();
        while (line != null) {
            line = line.substring(0,8).trim();
            list.add(Integer.parseInt(line));
            line = reader.readLine();
        }
        int max = Integer.MIN_VALUE;
        for (Integer i:list)
            if (i>max)
                max = i;
        max++;
        String max_id = Integer.toString(max);
        if (max_id.length()>8)
            max_id = max_id.substring(0,8);
        if (max_id.length()<8)
            for (int i = max_id.length(); i < 8; i++)
                max_id = max_id + " ";
        fr.close();
        reader.close();
        return max_id;
    }
    public static String makeProduct(String product){
        String str = product;
        if (str.length()>30)
            str = str.substring(0,30);
        if (str.length()<30)
            for (int i = str.length(); i < 30; i++)
                str = str + " ";
        return str;
    }
    public static String makePrice(String price){
        String str = price;
        if (str.length()>8)
            str = str.substring(0,8);
        if (str.length()<8)
            for (int i = str.length(); i < 4; i++)
                str = str + " ";
        return str;
    }
    public static String makeQuantity(String quantity){
        String str = quantity;
        if (str.length()>4)
            str = str.substring(0,4);
        if (str.length()<4)
            for (int i = str.length(); i < 4; i++)
                str = str + " ";
        return str;
    }
 }

package com.javarush.test.level05.lesson07.task02

/* Создать класс Cat
Создать класс Cat (кот) с пятью инициализаторами:
- Имя,
- Имя, вес, возраст
- Имя, возраст (вес стандартный)
- вес, цвет, (имя, адрес и возраст неизвестны, это бездомный кот)
- вес, цвет, адрес ( чужой домашний кот)
Задача инициализатора – сделать объект валидным. Например, если вес неизвестен, то нужно указать какой-нибудь средний вес. Кот не может ничего не весить.
То же касательно возраста. А вот имени может и не быть (null). То же касается адреса: null.
*/

public class Cat
{
    private String name;
    private int age;
    private int weight;
    private String color;
    private String adr;

    public void initialize(String name) // Зачем тут age и weight ведь в условии говориться только про имя? 
    {
        this.name = name;
        this.age = 5;
        this.weight = 6;
    }
    public void initialize(String name, int weight, int age)
    {
        this.name = name;
        this.weight = weight;
        this.age = age;
    }
    public void initialize(String name, int age)
    {
        this.name = name;
        this.age = age;
        this.weight = 6;
    }
    public void initialize(int weight, String color) //в условии сказанно "имя, адрес и возраст неизвестны" тогда почему возраст тут указывается и имя и адрес нет? 
    {
        this.color = color;
        this.weight = weight;
        this.age = 5;
    }
    public void initialize(int weight, String color, String adr)// почему тут указывается возраст, а имя например нет?
    {
        this.weight = weight;
        this.color = color;
        this.adr = adr;
        this.age = 5;
    }
}


Код рабочий. Объясните некоторые строчки пожалуйста.
  • ,

level18.lesson10.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
Данные дополнены пробелами до их длины

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

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

public class Solution {
    public static void main(String[] args) throws Exception {
        String fileName = getFileName();
        switch (args[0]) {
            case "-c":
                writeData(fileName, args);
                break;
        }
    }
    
    /**
     * Get bases file name
     * @return bases file name
     * @throws IOException
     */
    static String getFileName() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String filename = reader.readLine();
        reader.close();

        return filename;
    }
    
    /**
     * Write to file
     * @param baseName bases file name
     * @param args row params
     * @throws IOException
     */
    static void writeData(String baseName, String[] args) throws IOException {
        RandomAccessFile base = new RandomAccessFile(baseName, "rw");

        int id = constructRowId(base);
        byte[] buffer = constructBuffer(id, args);

        base.seek(base.length());
        base.write(buffer, 0, buffer.length);

        base.close();
    }
    
    /**
     * Construct row id
     * @param base base file
     * @return row id
     */
    static int constructRowId(RandomAccessFile base) throws IOException{
        int result = 0;
        int id;
        byte[] buffer = new byte[8];

        for (long i = base.length()-80; i > 0; i = i-80) {
            base.seek(i);
            base.read(buffer);
            id = Integer.valueOf((new String(buffer)).trim());
            if (id > result) result = id;
        }
        return ++result;
    }
    
    /**
     * Construct buffer from params
     * @param id id row
     * @param params row params
     */
    static byte[] constructBuffer(int id, String[] params) {
        ArrayList<Byte> listBuffer = new ArrayList<Byte>();

        constructByteList(listBuffer, String.valueOf(id), 8);
        constructByteList(listBuffer, params[1], 60);
        constructByteList(listBuffer, params[2], 8);
        constructByteList(listBuffer, params[3], 4);

        return getBufferFromList(listBuffer);
    }
    
    /**
     * Fill the container for buffer
     * @param listBuffer container for byte buffer
     * @param str String for buffer
     * @param length strings length
     */
    static void constructByteList(ArrayList<Byte> listBuffer, String str, int length) {
        byte[] newByte = Arrays.copyOf(str.getBytes(), length);
        for (byte b : newByte) {
            // Fill spaces
            if (b == 0) listBuffer.add((byte) 32);
            else listBuffer.add(b);
        }
    }
    
    /**
     * Get array from bytes list
     * @param list bytes list
     * @return bytes array
     */
    static byte[] getBufferFromList(ArrayList<Byte> list) {
        byte[] result = new byte[list.size()];

        for (int i = 0; i < list.size(); i++) result[i] = list.get(i);
        return result;
    }
}

Непонятний баг!Не могу понять почему так?

ввод: числа1-20
Вивод:
1
2
1
3
2
1
3
2
4
1
3
2
4
1
5
3
6
2
4
6
1
5
3
6
2
4
6
1
5
7
3
6
2
4
6
8
1
5
7
3
6
9
2
4
6
8
1
5
7
3
6
9
2
4
6
8
10
1
5
7
3
6
9
2
4
6
8
10
1
5
7
11
3
6
9
12
2
4
6
8
10
12
1
5
7
11
3
6
9
12
package com.javarush.test.level07.lesson09.task01;


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

/* Три массива
1. Введи с клавиатуры 20 чисел, сохрани их в список и рассортируй по трём другим спискам:
Число делится на 3 (x%3==0), делится на 2 (x%2==0) и все остальные.
Числа, которые делятся на 3 и на 2 одновременно, например 6, попадают в оба списка.
2. Метод printList должен выводить на экран все элементы списка с новой строки.
3. Используя метод printList выведи эти три списка на экран. Сначала тот, который для x%3, потом тот, который для x%2, потом последний.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        ArrayList<Integer> list=new ArrayList<Integer>(20);

        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        for(int i=0;i<20;i++){

            list.add(Integer.parseInt(reader.readLine()));
           }
        ArrayList<Integer>listThree=new ArrayList<Integer>();
        ArrayList<Integer>listTwo=new ArrayList<Integer>();
        ArrayList<Integer>listAnother=new ArrayList<Integer>();

        for(int x:list){
            if(x%3==0){
                listThree.add(x);
            }
            if(x%2==0){
                listTwo.add(x);
            }
            if((x%2!=0 )&& (x%3!=0)){
                listAnother.add(x);

            }
          printList(listThree);
            printList(listTwo);
            printList(listAnother);

        }

    }

    public static void printList(List<Integer> list)
    {
       for(int x:list){
           System.out.println(x);
       }
    }
}
  • ,

level17.lesson10.home09 Немного изменено условие задачи.

Приветствую, очевидно где то путаю с исключениями, уже кучу вариантов перепробовал, Пробовал даже в try catch каждую строку что выбрасывает исключение брать… не проходит и все тут. Прошу обратить внимание что в отличие от предыдущих топиков тут немного изменено условие, все топы про эту задачу со старым условием прочитал.

Последний вариант(1 из многих) ниже, уже следую буквально ОБРАБОТАТЬ ВСЕ ИСКЛЮЧЕНИЯ. Все равно не проходит. Пробовал и все запихать в IOException (так как CorruptedDataException унаследован от него)и просто все в 1 try catch(Exception e). Кучу вариантов перепробовал. Закрытия scannera и readera не влияло на результат

Помогите понять что тут не так.

package com.javarush.test.level17.lesson10.home09;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/* Транзакционность
Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены.
1. Считать с консоли 2 имени файла
2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines
В методе joinData:
3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines
4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то
4.1. очистить allLines от данных
4.2. выбросить исключение CorruptedDataException
Метод joinData должен вызываться в main. Все исключения обработайте в методе main.
*/
public class Solution {
    public static List<String> allLines = new ArrayList<String>();
    public static List<String> forRemoveLines = new ArrayList<String>();
    public static void main(String[] args)
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String ffileName = null;
        String sfileName = null;
        try
        {
            ffileName = reader.readLine();
           sfileName = reader.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        Scanner scanner1 = null;
        Scanner scanner2 = null;
        try
        {
            scanner1 = new Scanner(new FileReader(ffileName));
            scanner2 = new Scanner(new FileReader(sfileName));
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
            while (scanner1.hasNext())
            {
                allLines.add(scanner1.next());
            }
            while (scanner2.hasNext())
            {
                forRemoveLines.add(scanner2.next());
            }
        try
        {
            new Solution().joinData();
        }
        catch (CorruptedDataException e)
        {
            e.printStackTrace();
        }
    }
    public void joinData () throws CorruptedDataException
    {
        if (allLines.containsAll(forRemoveLines))
        {
            allLines.removeAll(forRemoveLines);
        } else
        {
            allLines.clear();
            throw new CorruptedDataException();
        }
    }
}
package com.javarush.test.level17.lesson10.home09;
import java.io.IOException;
public class CorruptedDataException extends IOException {
}
  • ,

package com.javarush.test.level07.lesson09.task05;


Что тут не так а?

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

/* Удвой слова
1. Введи с клавиатуры 10 слов в список строк.
2. Метод doubleValues должен удваивать слова по принципу a,b,c -> a,a,b,b,c,c.
3. Используя цикл for выведи результат на экран, каждое значение с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list = new ArrayList<String>(10);
        for ( int i = 0; i < 10; i++ )
        {
            String s = reader.readLine();
            list.add(s);//Считать строки с консоли и объявить ArrayList list тут
        }

        ArrayList<String> result = doubleValues(list);

        for (String s : result)
        {
            System.out.println(s);
        }//Вывести на экран result
    }

    public static ArrayList<String> doubleValues(ArrayList<String> list)
    {
        for (int i = 0; i < list.size(); i++)
        {
            list.add(i, list.get(i));
            i++;
        }
        for ( int i = 0; i < list.size(); i++)
        {
            System.out.println(list.get(i));
        }//напишите тут ваш код
        return list;
    }
}