• ,

task18.task1827 не проходит проверку_РЕШЕНО

Всем доброго дня. Задача task18.task1827. Условие:
Прайсы
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


Валидатор при проверке выдаёт не засчитывает один пункт:
CrUD_test

Перепробовал что смог, может кто сможет помочь. Чего хочет валидатор и почему формат новой чтроки прайса его не устраивает. Заранее спасибо. Код программы ниже.

package com.javarush.task.task18.task1827;

/* 
Прайсы
*/

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

public class Solution {
    static String fileName;
    final static byte idLength = 8,
            productNameLength = 38,
            priceLength = 46,
            quantityLength = 50;
    static List<String[]> prices = new ArrayList<>();
    {

    }

    public static void main(String[] args) throws Exception {
        readPrices();
        switch (args[0]) {
            case ("-c"):
                createPrice(args);
                break;
        }
    }

    static void enterFileName() throws IOException{
        BufferedReader bRead = new BufferedReader(new InputStreamReader(System.in));
        fileName = bRead.readLine();
        bRead.close();
    }

    public static void createPrice(String[] args) throws IOException{//добавляет в список прайсов новый прайс и запис. в файл
        prices.add(getNewPriceArr(args));
        BufferedWriter bWriter = null;

        try {
            bWriter = new BufferedWriter(new FileWriter(fileName));

            for (int i = 0, end = prices.size() - 1;i < end;i++){
                bWriter.write(getPriceLine(prices.get(i)));
                bWriter.newLine();
            }

            bWriter.write(getPriceLine(prices.get(prices.size() - 1)));

        } catch (IOException e) {
            throw new IOException("Exception when file write", e);
        } finally {
            if (bWriter != null) {
                try {
                    bWriter.close();
                }
                catch (IOException ignore) {
                    /*NOP*/
                }
            }
        }
    }

    public static void readPrices() throws IOException{//загружает в карту содержимое файла
        enterFileName();
        BufferedReader bRead = null;
        String nextLine;

        try
        {
            bRead = new BufferedReader(new FileReader(fileName));
            while (bRead.ready())
            {
                nextLine = bRead.readLine();
                prices.add(new String[] {getID(nextLine), getProductName(nextLine), getPrice(nextLine), getQuantity(nextLine)});
            }
        } catch (FileNotFoundException e) {
            System.out.println("Exception when file found");
        } catch (IOException e) {
            throw new IOException("Exception when file read", e);
        } finally {
            if (bRead != null){
                try
                {
                    bRead.close();
                } catch (IOException ignore) {
                    /*NOP*/
                }
            }
        }
    }

    static String getID(String priceLine){//возвращает численное значение ID
        return priceLine.substring(0, idLength);
    }

    static String getProductName(String priceLine){//возвращает строку-название товара
        return priceLine.substring(idLength, productNameLength);
    }

    static String getPrice(String priceLine){//возвращает строку-цену товара
        return priceLine.substring(productNameLength, priceLength);
    }

    static String getQuantity(String priceLine){//возвращает строку-количество товара
        return priceLine.substring(priceLength);
    }

    static int getMaxID(){
        if (prices.size() == 0) {
            return 0;
        }
        Object[] idS = new Object[prices.size()];

        for (int i = 0, end = prices.size();i < end;i++){
            idS[i] = getIntID(prices.get(i)[0]);
        }

        Arrays.sort(idS);
        return (int)idS[idS.length - 1];
    }

    static String getNextID(){
        int nextID = getMaxID() + 1;
        String nextIDStr = Integer.toString(nextID);

        if (nextIDStr.length() < idLength) {
            for (int i = 0, end = idLength - nextIDStr.length();i < end;i++) {
                nextIDStr = nextIDStr + " ";
            }

            return nextIDStr;
        } else if (nextIDStr.length() > idLength) {
            return nextIDStr.substring(0, 8);
        }

        return nextIDStr;
    }

    static int getIntID(String stringID){
        return Integer.parseInt(stringID.split(" ")[0]);
    }

    static String[] getNewPriceArr(String[] args){//возвр массив [4] с занесенными параметрами
        return new String[]{getNextID(), getNewPriceProdName(args[1]), getNewPricePrice(args[2]), getNewPriceQuantity(args[3])};
    }

    static String getNewPriceProdName(String prodName){//возвращает адаптированное значение названия
        int prodNameSize = productNameLength - idLength;
        String newProdName = prodName;

        if (prodName.length() > prodNameSize) {
            newProdName = newProdName.substring(0, prodNameSize);
        } else if (prodName.length() < prodNameSize) {
            for (int i = 0, end = prodNameSize - prodName.length();i < end;i++) {
                newProdName = newProdName + " ";
            }
        }

        return newProdName;
    }

    static String getNewPricePrice(String price){//возвращает адаптированное значение цены
        int priceSize = priceLength - productNameLength;
        String newPrice = price;

        if (price.length() > priceSize) {
            newPrice = newPrice.substring(0, priceSize);
        } else if (price.length() < priceSize) {
            for (int i = 0, end = priceSize - price.length();i < end;i++) {
                newPrice = newPrice + " ";
            }
        }

        return newPrice;
    }

    static String getNewPriceQuantity(String quant){//возвращает адаптированное значение количества
        int quantSize = quantityLength - priceLength;
        String newQuant = quant;

        if (quant.length() > quantSize) {
            newQuant = newQuant.substring(0, quantSize);
        } else if (quant.length() < quantSize) {
            for (int i = 0, end = quantSize - quant.length();i < end;i++) {
                newQuant = newQuant + " ";
            }
        }

        return newQuant;
    }

    static String getPriceLine(String[] price){
        return price[0] + price[1] + price[2] + price[3];
    }
}
  • ,

Время работы сервера

Здравствуйте.
Я заметил, что периодически утром недоступен сервер проверки задач. Ни через плагин IDEA, ни через браузер задачи не проверяются. У меня часовой пояс GMT +9. Сервер недоступен где-то до 12, может быть 13 часов. Вы можете подсказать, в какое время проводятся регламентные работы по обслуживанию серверов или чем ещё может быть обусловлена данная проблема. Новые лекции тоже почитать не удается. По нажатию зеленой кнопки ничего не происходит.
Спасибо.
  • ,

com.javarush.test.level16.lesson13.home05

Исходный код задачи:

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

/* Взаимная блокировка
1. Разберись, как работает программа.
2. Не меняя классы T1 и T2 сделай так, чтобы они завершились, не обязательно успешно.
3. метод sleep не использовать.
*/

public class Solution {
    static Thread t1 = new T1();
    static Thread t2 = new T2();

    public static void main(String[] args) throws InterruptedException {
        t1.start();
        t2.start();
    }

    public static class T1 extends Thread {
        @Override
        public void run() {
            try {
                t2.join();
                System.out.println("T1 finished");
            } catch (InterruptedException e) {
                System.out.println("T1 was interrupted");
            }
        }
    }

    public static class T2 extends Thread {
        @Override
        public void run() {
            try {
                t1.join();
                System.out.println("T2 finished");
            } catch (InterruptedException e) {
                System.out.println("T2 was interrupted");
            }
        }
    }
}


Задача корректно завершается, однако проверку не проходит если написать в main сл. код:

public static void main(String[] args) throws InterruptedException {
    t1.start();
    t1.join();
    t2.start();
}


Так и задумано?

Не принимает проверку сервер задача level21.lesson16.big01

Задание 15
Добавим определение победителя.
В классе Hippodrome сделаем два метода:
public Horse getWinner() и public void printWinner()

Метод getWinner должен возвращать лошадь пробежавшую самую большую дистанцию.
Метод printWinner выводит на экран имя победителя в виде:
Winner is !
Пример:
Winner is Lucky!

Задание 14
Запускаем и любуемся.
У нас каждые полсекунды отображается новый кадр с ситуацией на ипподроме.
Мышкой уменьши размер консоли так, чтобы был виден только один «кадр» и на том же самом месте.
Тогда можно наблюдать забег в живую и даже покомментировать:
— Старт.
— Гомер неожиданно обходит Лаки.
— Слевин вырывается вперед.
— Вперед Лаки!
— 10 баксов на Слевина.
— Похоже Лаки сбросил жокея и расслабился.
— Гомер уверенно вырывается вперед.
— Неожиданно для всех побеждает Гомер. Вот это номер!

Задание 13
Теперь вернемся к методу print класса Horse.
Т.к. мы работаем с консолью, то все лошади на бегах будут выглядеть примерно так:
........Sleven < — лошадь Слевин
....Lucky < — лошадь Лаки
..........Gomer < — лошадь Гомер

Другими словами, в методе print надо вывести на экран строку состоящую из точек и имени лошади.
Количество точек равно distance, округленному до целого числа.

Задание 12
Осталось совсем немного — дописать класс Horse.
Каждый ход у лошади будет вызываться метод move.
Когда у лошади вызывают метод move, лошадь должна пробежать некоторую дистанцию.
Дистанция зависит от скорости лошади (speed). В самом простом варианте, выглядеть этот метод должен примерно так:
distance += speed;

Но, чтобы было интереснее, давай сделаем так, чтобы скорость все время немного менялась.
Для этого умножь speed на случайное число.
Случайное число можно получить с помощью метода Math.random()

Задание 11
С классом Hippodrome почти закончили.
Добавь в конец метода main вызов run().

Подсказка:
run() — это нестатический метод, поэтому вызвать его можно только у объекта.
А где взять объект?

Подсказка 2:
game.run();

Задание 10
Еще нужно написать метод print класса Hippodrome.
В нем тоже все просто: в цикле для каждой лошади вызываем ее метод print.
Ну, и еще выведи после цикла пару пустых строк: System.out.println() — чтобы было красивее.

Задание 9
Теперь вернемся к методам move и print. Начнем с move.
В методе move класса Hippodrome в цикле у каждой лошади мы вызываем метод move.

Да ты прав, его еще нет у класса Horse.
Поэтому в класс Horse надо добавить свой метод move :)
И метод print, кстати тоже.
Если я не говорю ничего насчет параметров метода, значит метод без параметров.
Делай все методы public, если явно не указано обратное.

Задание 8
В методе run сделай цикл от 1 до 100. Это и будет наш забег.
В теле цикла вызываем сначала move, затем print.
Чтобы весь цикл не отработал за долю секунды — добавь в него еще Thread.sleep(200);

Задание 7
Но и это еще не все — надо чтобы лошади бежали.
Добавь в класс Hippodrome методы run, move и print. Без параметров.
Метод move будет управлять движением всех лошадей.
Метод print отрисовывать их на экран.
А метод run — управлять всем этим.

Задание 6
Теперь перейдем к методу main.
Нам нужно создать в нем объект класса Hippodrome и добавить ему несколько лошадей.

Для начала:
Создай статическую переменную game типа Hippodrome.
Должно получиться что-то вроде:
public static Hippodrome game;

В методе main надо:
а) Создать объект типа Hippodrome и сохранить его в переменную game.
б) Создать три объекта «лошадь». Имена придумай сам. Начальные скорость у всех лошадей — 3, дистанция — 0.
в) Добавить созданных лошадей в список лошадей ипподрома (horses). Используйте для этого геттер.

Задание 5
Закончим написание класса «лошадь»
Добавь конструктор с параметрами (name, speed, distance).
Добавь getter'ы и setter'ы для всех полей класса Horse.
Делай все методы public, если явно не указано обратное.

Задание 4
Теперь вернемся к лошадям. У каждой лошади на скачках должны быть известны имя(name) и скорость(speed).
Наши лошади будут бежать просто определенное время (100 секунд/«шагов»).
Будем определять победителя, как лошадь, пробежавшая наибольшую дистанции.

Поэтому нам понадобится хранить расстояние(distance), которое лошадь уже пробежала.
Добавь в класс Horse переменные name (String), speed (double), distance(double).

Задание 3
Раз это ипподром, то на нем должны быть лошади.
А, значит наш ипподром должен хранить список всех его лошадей.
Добавь переменную horses типа ArrayListв класс Hippodrome.
Добавь getter для этого поля.

Задание 2
Любая программа начинается с выполнения метода main.
Добавь метод main в класс Hippodrome.

Задание 1
Сегодня мы напишем небольшую игру под названием «Ипподром».
Когда я говорю мы — я имею ввиду тебя. Я же буду работать наставником.

Для начала нам понадобятся классы «ипподром» и «лошадь».
Создай классы Hippodrome (ипподром), Horse(лошадь)

Класс Ипподром:
import java.util.ArrayList;

public class Hippodrome
{
    public static Hippodrome game;

    public static void main(String[] args) throws InterruptedException
    {
        game = new Hippodrome();
        game.getHorses().add(new Horse("Vaska", 3, 0));
        game.getHorses().add(new Horse("Musko", 3, 0));
        game.getHorses().add(new Horse("Max", 3, 0));
        game.run();
        game.printWinner();
    }

    private ArrayList<Horse> horses = new ArrayList<Horse>();

    public ArrayList<Horse> getHorses()
    {
        return horses;
    }

    public void move()
    {
        for (Horse horse : game.getHorses())
        {
            horse.move();
        }
    }

    public void print()
    {
        for (Horse horse : game.getHorses())
        {
            horse.print();
        }
        System.out.println();
        System.out.println();
    }

    public void run() throws InterruptedException
    {
        for (int i = 0; i < 100; i++)
        {
            move();
            print();
            Thread.sleep(200);
        }
    }

    public Horse getWinner()
    {
        Horse horseWinner = game.getHorses().get(0);
        for (Horse horse : game.getHorses())
        {
            if(horseWinner.getDistance() < horse.getDistance()) horseWinner = horse;
        }
        return horseWinner;
    }

    public void printWinner()
    {
        System.out.println("Winner is " + game.getWinner().getName() + "!");
    }
}


Класс лошадь:
public class Horse
{
    private String name;
    private double speed;
    private double distance;

    public Horse(String name, double speed, double distance)
    {
        this.name = name;
        this.speed = speed;
        this.distance = distance;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public double getSpeed()
    {
        return speed;
    }

    public void setSpeed(double speed)
    {
        this.speed = speed;
    }

    public double getDistance()
    {
        return distance;
    }

    public void setDistance(double distance)
    {
        this.distance = distance;
    }

    public void move()
    {
        distance += Math.round(speed * Math.random());
    }

    public void print()
    {
        for (int i = 0; i < distance; i++)
        {
            System.out.print(".");
        }
        System.out.println(name);
    }
}