• 0.00

  • 0.00

level27.lesson15.big01 Задание 2. Прошу помощи! Тестирование заболело

Заранее извиняюсь за повторное создание темы.
Это задание просто отказывается проходить тесты!
Само задание:
Задание 2
1. Мы много работаем с консолью. Пора создать единую точку взаимодействия.
Создайте класс ConsoleHelper с единственным BufferedReader, через который будете работать с консолью.
Запомните, этот класс не хранит никаких данных и состояний, поэтому все методы будут статическими.
Создайте в нем три метода:
-writeMessage(String message) - для вывода message в консоль
-String readString() - для чтения строки с консоли
-List<Dish> getAllDishesForOrder() - просит ползователя выбрать блюдо и добавляет его в список. Введенное 'exit' означает завершение заказа.
исключения пробрасывайте выше, на этом уровне не понятно, что с ними делать.

2. Отрефакторьте код - работа с консолью должна быть только через класс ConsoleHelper

3. Вернемся к классу Order: в нем есть ссылка на планшет, и еще есть список выбранных блюд.
Создайте поле dishes - список блюд. Инициализируйте его в конструкторе, вызвав метод getAllDishesForOrder из ConsoleHelper.

4. Перепишите метод toString в классе Order. Пусть он возвращает пустую строку, если нет блюд в заказе, иначе
вывод должен быть аналогичный примеру в порядке добавления блюд. Используйте ConsoleHelper.
Пример:
Your order: [Juice, Fish] of Tablet{number=5}

5. У нас все завязано на работу с консолью. Однако, при возникновении исключений, наше приложение умрет.
Чтобы узнать причину - добавим в Tablet статический логгер java.util.logging.Logger, инициализированный именем класса.

6. В методе createOrder класса Tablet обработаем исключения ввода-вывода.
Запишем в лог "Console is unavailable.". Уровень лога - SEVERE - это самый серьезный уровень, мы не можем работать.

7. Надо начинать тестировать наше приложение.
Добавьте в main создание планшета и создание заказа - new Tablet(5).createOrder();


Dish.java:
package com.javarush.test.level27.lesson15.big01.kitchen;

import java.util.Arrays;

/**
 Enum блюд
 */
public enum Dish
{
    Fish,
    Steak,
    Soup,
    Juice,
    Water;

    public static String allDishesToString()
    {
        StringBuilder sb = new StringBuilder(Arrays.toString(values()));
        sb.delete(sb.length() - 1, sb.length());
        sb.delete(0, 1);
        return sb.toString();
    }
}


ConsoleHelper.java:
package com.javarush.test.level27.lesson15.big01;

import com.javarush.test.level27.lesson15.big01.kitchen.Dish;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ConsoleHelper
{
    private static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static void writeMessage(String message)
    {
        System.out.println(message);
    }

    public static String readString() throws IOException
    {
        return reader.readLine();
    }

    public static List<Dish> getAllDishesForOrder() throws IOException
    {
        List<Dish> dishes = new ArrayList<>();
        String str;
        writeMessage("Enter dish...(" + Dish.allDishesToString() + ")");
        while (true)
        {
            str = readString();
            if ("exit".equalsIgnoreCase(str))
                break;

            try
            {
                dishes.add(Dish.valueOf(str));
            }
            catch (IllegalArgumentException e)
            {
                ConsoleHelper.writeMessage(str + " is not detected");
            }
        }
        return dishes;
    }
}

Order.java:
package com.javarush.test.level27.lesson15.big01.kitchen;

import com.javarush.test.level27.lesson15.big01.ConsoleHelper;
import com.javarush.test.level27.lesson15.big01.Tablet;

import java.io.IOException;
import java.util.List;

/**
 Заказ
 */
public class Order
{
    private List<Dish> dishes;
    private Tablet tablet;

    public Order(Tablet tablet) throws IOException
    {
        this.dishes = ConsoleHelper.getAllDishesForOrder();
        this.tablet = tablet;
    }

    @Override
    public String toString()
    {
        if (dishes == null || dishes.isEmpty())
            return "";
        else
            return "You order: " + dishes.toString() + " of " + tablet;
    }
}


Tablet.java:
package com.javarush.test.level27.lesson15.big01;

import com.javarush.test.level27.lesson15.big01.kitchen.Order;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 Планшет
 */
public class Tablet
{
    //номер планшета
    private final int number;
    private static Logger logger = Logger.getLogger(Tablet.class.getName());

    public Tablet(int number)
    {
        this.number = number;
    }

    public void createOrder()
    {
        Order order;
        try
        {
            order = new Order(this);
            ConsoleHelper.writeMessage(order.toString());
        }
        catch (IOException e)
        {
            logger.log(Level.SEVERE, "Console is unavailable.");
        }
    }

    @Override
    public String toString()
    {
        return "Tablet{number=" + number + '}';
    }
}


Вывод на экран:
Enter dish...(Fish, Steak, Soup, Juice, Water)
Fish
Soup
Wateeeer
Wateeeer is not detected
Steak
ExIt
You order: [Fish, Soup, Steak] of Tablet{number=5}
  • ,

level26.lesson15.big01 Задание 9. Отказывается проходить тест

Условия задачи:
Задание 9
Сегодня мы займемся командой ExitCommand.
1. Реализуйте следующую логику в команде ExitCommand:
1.1. Спросить, действительно ли пользователь хочет выйти - варианты <y,n>.
1.2. Если пользователь подтвердит свои намерения, то попрощаться с ним.

Это всё хорошо, но бывают случаи, когда срочно нужно прервать операцию, например, если пользователь ошибся с выбором операции.
Для этого у нас есть InterruptOperationException.
2.Реализуйте следующую логику:
2.1. Если пользователь в любом месте ввел текст 'EXIT' любым регистром, то выбросить InterruptOperationException.
2.2. Найдите единственное место, куда нужно вставить эту логику. Реализуйте функционал в этом единственном методе.

3. Заверните тело метода main в try-catch и обработайте исключение InterruptOperationException.
Попрощайтесь с пользователем в блоке catch используя ConsoleHelper.


CashMashine.java

public class CashMachine
{
    public static void main(String[] args) throws Exception
    {
        Locale.setDefault(Locale.ENGLISH);
        try
        {
            Operation operation = null;

            do
            {
                operation = ConsoleHelper.askOperation();
                CommandExecutor.execute(operation);
            } while (operation != Operation.EXIT);

        } catch (InterruptOperationException e)
        {
            ConsoleHelper.writeMessage("bye");
        }
}


ExitCommand.java

class ExitCommand implements Command
{
    @Override
    public void execute() throws InterruptOperationException
    {
        ConsoleHelper.writeMessage("Are you sure want to quit? (y,n):");
        String answer;
        try
        {
            answer = ConsoleHelper.readString();

            if ("y".equalsIgnoreCase(answer.trim()))
            {
                ConsoleHelper.writeMessage("Bye");
            } else if ("n".equalsIgnoreCase(answer.trim()))
            {
                CommandExecutor.execute(ConsoleHelper.askOperation());
            }
        } catch (IOException e)
        {

        }
    }
}


ConsoleHelper.java

public static String readString() throws InterruptOperationException
{
        String line = null;

        try
        {
            line = reader.readLine();
            if ("EXIT".equalsIgnoreCase(line))
                throw new InterruptOperationException();
        } catch (IOException e)
        {

        }
        return line;
}
  • ,

level21.lesson16.big01. Задание 11. Все перепроверил.

Доброго времени суток. Укажите, пожалуйста, на мою ошибку. Сам я её, увы, не вижу.
Люди добрые, укажите на ошибку, я её, увы, не вижу.

Условие задачи.txt:

Задание 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<Horse> в класс Hippodrome.
    Добавь getter для этого поля.
    
    
    
    Задание 2
    Любая программа начинается с выполнения метода main.
    Добавь метод main в класс Hippodrome.
    
    
    
    Задание 1
    Сегодня мы напишем небольшую игру под названием "Ипподром".
    Когда я говорю мы - я имею ввиду тебя. Я же буду работать наставником.
    
    Для начала нам понадобятся классы "ипподром" и "лошадь".
    Создай классы Hippodrome (ипподром), Horse(лошадь)


Hippodrome.java:
package com.javarush.test.level21.lesson16.big01;
    
    import java.util.ArrayList;
    
    public class Hippodrome
    {
        public static Hippodrome game;
    
        public static void main(String[] args) throws InterruptedException
        {
            game = new Hippodrome();
    
            game.horses.add(new Horse("Vaska", 3, 0));
            game.horses.add(new Horse("Musko", 3, 0));
            game.horses.add(new Horse("Max", 3, 0));
    
            game.run();
        }
    
        private ArrayList<Horse> horses = new ArrayList<>();
    
        public ArrayList<Horse> getHorses()
        {
            return horses;
        }
    
        public void run() throws InterruptedException
        {
            for (int i = 0; i < 100; i++)
            {
                move();
                print();
                Thread.sleep(200);
            }
        }
    
        public void move()
        {
            for (Horse tmp : getHorses())
            {
                tmp.move();
            }
        }
    
        public void print()
        {
            for (Horse tmp : getHorses())
            {
                tmp.print();
            }
    
            System.out.println();
            System.out.println();
        }
    }


Horse.java:

package com.javarush.test.level21.lesson16.big01;
    
    public class Horse
    {
        String name;
        double speed;
        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() {}
    
        public void print() {}
    }