Несколько заданий из квеста Core
/* 1. Подумай, какой из двух интерфейсов нужно реализовать в классе BeerLover. 2. Добавь к классу BeerLover этот интерфейс и реализуй все его методы. 3. Подумай, как связаны переменная READY_TO_GO_HOME и метод isReadyToGoHome. 4. Верни значение переменной READY_TO_GO_HOME в методе isReadyToGoHome. Требования: • Класс BeerLover должен реализовывать(implements) интерфейс Alcoholic. • Класс BeerLover не должен реализовывать интерфейс Drinker напрямую(только опосредованно через Alcoholic) • В классе BeerLover должны быть реализованы все методы интерфейса Alcoholic. • В классе BeerLover должны быть реализованы все методы интерфейса Drinker. • Метод isReadyToGoHome должен возвращать значение переменной READY_TO_GO_HOME. /////////////////////////////////////////////////////////////////// */ package com.javarush.task.task13.task1301; /* Пиво */ public class Solution { public static void main(String[] args) throws Exception { } public interface Drinker { void askForMore(String message); void sayThankYou(); boolean isReadyToGoHome(); } public interface Alcoholic extends Drinker { boolean READY_TO_GO_HOME = false; void sleepOnTheFloor(); } public static class BeerLover { } }
Еще задание:
/* 1. Переделай наследование в классах и интерфейсах так, чтобы программа компилировалась и продолжала делать то же самое. 2. Класс Hobby должен наследоваться от интерфейсов Desire, Dream. Требования: • Интерфейс Desire должен быть реализован в классе Hobby. • Интерфейс Dream должен быть реализован в классе Hobby. • Класс Hobby должен содержать статическую переменную INDEX. • Метод toString в классе Hobby должен инкрементировать и возвращать переменную INDEX в виде строки. */ package com.javarush.task.task13.task1321; /* Исправление ошибок */ public class Solution { public static void main(String[] args) { System.out.println(Dream.HOBBY.toString()); System.out.println(new Hobby().INDEX); } interface Desire { } interface Dream implements Hobby { public static Hobby HOBBY = new Hobby(); } static class Hobby extends Desire, Dream { static int INDEX = 1; @Override public String toString() { INDEX++; return "" + INDEX; } } }
И еще задание:
/* 1.Разберись, что делает программа. Официант почему-то не относит приготовленные блюда назад к столам :( 2.Исправь ошибку. Требования: • Класс Restaurant должен содержать список поваров и официантов (public static поле threads типа List<Thread>). • Класс Manager должен содержать очередь с заказами (private final поле orderQueue типа Queue<Order>). • Класс Manager должен содержать очередь с готовыми блюдами (private final поле dishesQueue типа Queue<Dishes>). • Класс Manager должен реализовывать паттерн Singleton. • Класс Waiter должен реализовывать интерфейс Runnable. • Класс Cook должен реализовывать интерфейс Runnable. • Если нет готовых блюд в очереди, нить класса Waiter должна получать заказ от столика и добавлять его в очередь заказов. • Если есть готовые блюда в очереди, нить класса Waiter должна брать блюдо из очереди и относить заказ для столика. • Если нет заказов в очереди с заказами, нить класса Cook должна отдыхать (повар отдыхает). • Если есть заказы в очереди с заказами, нить класса Cook должна готовить блюдо и добавлять его в очередь с готовыми блюдами. /////////////////////////////////////////////////////////////////// */ package com.javarush.task.task17.task1712; import java.util.ArrayList; import java.util.List; /* Ресторан */ public class Restaurant { public static List<Thread> threads = new ArrayList<>(); public static void main(String[] args) throws Exception { Waiter waiterTarget = new Waiter(); Thread waiter = new Thread(waiterTarget); threads.add(waiter); Cook cookTarget = new Cook(); Thread cook = new Thread(cookTarget); threads.add(cook); waiter.start(); cook.start(); Thread.sleep(2000); cookTarget.continueWorking = false; Thread.sleep(500); waiterTarget.continueWorking = false; } } /////////////////////////////////////////////////////////////////// package com.javarush.task.task17.task1712; public class Dishes { private byte tableNumber; public Dishes(byte tableNumber) { this.tableNumber = tableNumber; } public byte getTableNumber() { return tableNumber; } } /////////////////////////////////////////////////////////////////// package com.javarush.task.task17.task1712; public class Table { private static byte tableNumber; private byte number = ++tableNumber; public Order getOrder () { return new Order(number); } } /////////////////////////////////////////////////////////////////// package com.javarush.task.task17.task1712; public class Order { private long time; private byte tableNumber; public Order(byte tableNumber) { time = (long) (Math.random() * 200); this.tableNumber = tableNumber; } public long getTime() { return time; } public byte getTableNumber() { return tableNumber; } } /////////////////////////////////////////////////////////////////// package com.javarush.task.task17.task1712; public class Waiter implements Runnable { public boolean continueWorking = true; @Override public void run() { Manager manager = Manager.getInstance(); while (continueWorking || !manager.getDishesQueue().isEmpty()) { if (!manager.getDishesQueue().isEmpty()) { //относим готовый заказ Dishes dishes = manager.getDishesQueue().poll(); System.out.println("Официант отнес заказ для стола №" + dishes.getTableNumber()); } else { //берем новый заказ Table table = manager.getNextTable(); Order order = table.getOrder(); System.out.println("Получен заказ от стола №" + order.getTableNumber()); manager.getOrderQueue().add(order); } try { Thread.sleep(100); //walking to the next table } catch (InterruptedException e) { } } } }