level06.lesson11.bonus02 (не проходит тестирование)

Всем доброго времени суток!
Не могу понять, почему не проходит тестирование.
Компилируется, вывод совпадает с условиями.
public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String grandfatherName = reader.readLine();
        Cat catGrandFather = new Cat(grandfatherName);

        String grandmotherName = reader.readLine();
        Cat catGrandMother = new Cat(grandmotherName);

        String fatherName = reader.readLine();
        Cat catFather = new Cat(fatherName, null, catGrandFather);

        String motherName = reader.readLine();
        Cat catMother = new Cat(motherName, catGrandMother, null);

        String sonName = reader.readLine();
        Cat catSon = new Cat(sonName, catMother, catFather);

        String daughterName = reader.readLine();
        Cat catDaughter = new Cat(daughterName, catMother, catFather);

        System.out.println(catGrandFather);
        System.out.println(catGrandMother);
        System.out.println(catFather);
        System.out.println(catMother);
        System.out.println(catSon);
        System.out.println(catDaughter);
    }

    public static class Cat
    {
        private String name;
        private Cat parent1;
        private Cat parent2;

        Cat(String name)
        {
            this.name = name;
        }

        Cat(String name, Cat parent1, Cat parent2)
        {
            this.name = name;
            this.parent1 = parent1;
            this.parent2 = parent2;
        }


        @Override
        public String toString()
        {
            if (parent1 == null && parent2 == null)
                return "Cat name is " + name + ", no mother, no father";
            else if (parent1 == null)
                return "Cat name is " + name + ", no mother, father is " + parent2.name;
            else if (parent2 == null)
                return "Cat name is " + name + ", mother is " + parent1.name + ", no father";
            else
                return "Cat name is " + name + ", mother is " + parent1.name + ", father is " + parent2.name;
        }

    }
}
  • ,

com.javarush.test.level15.lesson12.home09

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

public class Solution {
public static void main(String[] args) throws Exception{
//Ответ
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String text=bufferedReader.readLine();
ArrayListlist=new ArrayList<>();
int index=text.indexOf("?");
boolean isStast=false;
for (int i = 0; i <text.length(); i++) {
if ( (text.charAt(i)=='&'||text.charAt(i)=='=')&&!isStast ) {
list.add(text.substring(index+1,i));
isStast=true;
}
if ((text.charAt(i)=='&')&&isStast) {
index=i;
isStast=false;
}
}
for (int i = 0; i <list.size(); i++) {
System.out.print(list.get(i)+" ");
}
System.out.println();
if (text.contains(«obj»))
{
index=text.indexOf("=");
int index2=text.indexOf("&");
String text2=text.substring(index+1,index2);
if (isTextNumber(text2)){
alert(Double.parseDouble(text2));
}
else
alert(text2);
}
//Конец ответа
}
//Проверяет число или текст
private static boolean isTextNumber(String text){
char[]arrayNumbers=new char[]{'1','2','3','4','5','6','7','8','9','0','.'};
boolean isNumber=true;
for (int i = 0; i <text.length()&&isNumber; i++) {
isNumber=false;
for (int j = 0; j <arrayNumbers.length; j++) {
if (text.charAt(i)==arrayNumbers[j]) {
isNumber=true;
}
}
}
return isNumber;
}

public static void alert(double value) {
System.out.println(«double » + value);
}

public static void alert(String value) {
System.out.println(«String » + value);
}
}
Не проходит но пример обрабатывает.
  • ,

Level08.Lesson11.Home05.

Не проходит тестирование, в среде запускается и работает исправно(пока не придумал нерабочий пример). Перед тем как реализовать через char массив, хотелось бы разобраться, почему этот вариант является нерабочим.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/* Мама Мыла Раму. Теперь с большой буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа заменяет в тексте первые буквы всех слов на заглавные.
Вывести результат на экран.

Пример ввода:
  мама     мыла раму.

Пример вывода:
  Мама     Мыла Раму.
*/

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();
        String s1="";
        if(s.charAt(0)!=' ') s1=s1+ Character.toUpperCase(s.charAt(0));

             for (int i = 0; i <s.length()-1 ; i++)
            {
                if(s.charAt(i)==' '&&Character.isLowerCase(s.charAt(i+1))){
                    s1= s1+s.charAt(i)+Character.toUpperCase(s.charAt(i+1));
                    i++;
                }
                else s1=s1+s.charAt(i);
            }
            while(s1.length()<s.length())s1=s1+s.charAt(s1.length());
        System.out.println(s1);
        //напишите тут ваш код
    }


}

Не принимает решение - level06.lesson08.task05?

Добрый день!
Подскажите, что не так))

/* Класс StringHelper
Cделать класс StringHelper, у которого будут 2 статических метода:
String multiply(String s, int count) – возвращает строку повторенную count раз.
String multiply(String s) – возвращает строку повторенную 5 раз.
Пример:
Амиго -> АмигоАмигоАмигоАмигоАмиго
*/

public class StringHelper
{
public static String multiply(String s)
{
String result = "";
for (int i = 0; i <5; i++)
{
System.out.print(s);
}
//напишите тут ваш код
return result;
}

public static String multiply(String s, int count)
{
String result = "";
for (int i = 0; i <count; i++)
{
System.out.print(s);
}
//напишите тут ваш код
return result;
}
  • ,

test.level27.lesson15.big01 Задача 2

****************************************************************
Задание 2
1. Мы много работаем с консолью. Пора создать единую точку взаимодействия.
Создайте класс ConsoleHelper с единственным BufferedReader, через который будете работать с консолью.
Запомните, этот класс не хранит никаких данных и состояний, поэтому все методы будут статическими.
Создайте в нем три метода:
-writeMessage(String message) — для вывода message в консоль
-String readString() — для чтения строки с консоли
-ListgetAllDishesForOrder() — просит ползователя выбрать блюдо и добавляет его в список. Введенное '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

package com.javarush.test.level27.lesson15.big01.kitchen;

public enum Dish {
    Fish, Steak, Soup, Juice, Water;

    public static String allDishesToString(){
        StringBuilder sb = new StringBuilder();
        for(Dish dish : Dish.values()){
            sb.append(dish.toString()+", ");
        }
        return sb.substring(0, sb.length()-2);
    }

}


Order

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.isEmpty())
            return "";
        else
            return "Your order: " + dishes + " of " + tablet;
    }
}


ConsoleHelper


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 {
    static 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, IllegalArgumentException {
        List<Dish> dishes = new ArrayList<>();
        writeMessage("Please, choose the dish, in case to exit enter 'exit':");
        String dish;
        while(true){
            dish = readString();
            if(dish.equalsIgnoreCase("exit"))
                break;
            dishes.add(Dish.valueOf(dish));
        }
        return dishes;
    }
}


Restaurant

package com.javarush.test.level27.lesson15.big01;

public class Restaurant {
    public static void main(String[] args) {
        new Tablet(5).createOrder();
    }
}


Tablet

ackage 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;
    public static Logger logger = Logger.getLogger(Tablet.class.getName());

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

    public void createOrder(){
        try {
            Order 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 + "}";
    }
}
  • ,

package com.javarush.test.level05.lesson12.bonus03;

package com.javarush.test.level05.lesson12.bonus03;

import sun.text.bidi.BidiBase;

import java.io.*;

/* Задача по алгоритмам
Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int maximum = 0;
int[] massive;
int max = Integer.parseInt(reader.readLine());
if (max > 0)
{
massive = new int[max];
}
else
{
return;
}
int z = massive.length;
for (int i = 0; i < z; i++) {
massive[i] = Integer.parseInt(reader.readLine());
if(massive[i] > max) {
maximum = massive[i];
}
}

System.out.println(maximum);
}
}

На моём компе решается… а тестирование не проходит… почему?
  • ,

level08.lesson11.home05

Добрый день.
Есть задача:
package com.javarush.test.level08.lesson11.home05;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/* Мама Мыла Раму. Теперь с большой буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа заменяет в тексте первые буквы всех слов на заглавные.
Вывести результат на экран.

Пример ввода:
  мама     мыла раму.

Пример вывода:
  Мама     Мыла Раму.
*/

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();

        //напишите тут ваш код
        String[] splited = s.split(" ");
        String newString = "";
        for (int i = 0; i < splited.length; i++)
        {
            char ch = splited[i].charAt(0);
            char chUpper = splited[i].toUpperCase().charAt(0);
            String strCh = "" + ch;
            String strChUp = "" + chUpper;
            splited[i] = splited[i].replaceFirst(strCh, strChUp);
            newString = newString + splited[i] + " ";
        }
        newString = newString.trim();

        System.out.println(newString);
    }
}

В IDEA работает всё прекрасно, но не проходит тестирование. Подскажите, пожалуйста, что посмотреть?

P.S. ещё раз почитал комментарии и сделал вывод, что данную задачу нельзя решать через split, потому что не спроста указано много пробелов в вводе и выводе, так? Надо решать обязательно через toCharArray()?

level29.lesson15.big01 Задание 12

Задание 12.


12.1. Объединение условных операторов.
12.1.1. Добавь внутренний метод, сообщающий, могут ли быть перевезены пассажиры
boolean canPassengersBeTransferred() в класс Car. Метод должен возвращать true, если
водитель доступен isDriverAvailable и есть топливо fuel.
12.1.2. Перепиши метод getNumberOfPassengersCanBeTransferred(), объединив условные
операторы (используй метод canPassengersBeTransferred()).
12.2. Объединение дублирующихся фрагментов в условных операторах. Перепиши метод
startMoving(), чтобы в нем не было повторяющихся вызовов функций.
12.3. Замена магического числа символьной константой. Замени магические числа в методе
getMaxSpeed() на константные переменные метода: MAX_TRUCK_SPEED,
MAX_SEDAN_SPEED и MAX_CABRIOLET_SPEED.
12.4. Замена условного оператора полиморфизмом.
12.4.1. Переопредели метод getMaxSpeed() в подклассах, избавившись от условного
оператора.
12.4.2. Метод getMaxSpeed() в классе Car сделай абстрактным.

Подскажите что не так, вроде все по условию

public abstract class Car {
    static public final int TRUCK = 0;
    static public final int SEDAN = 1;
    static public final int CABRIOLET = 2;


    double fuel;

    public double summerFuelConsumption;
    public double winterFuelConsumption;
    public double winterWarmingUp;

    private int type;

    private boolean driverAvailable;
    private int numberOfPassengers;

    public Car(int type, int numberOfPassengers) {
        this.type = type;
        this.numberOfPassengers = numberOfPassengers;
    }
    public static Car create(int type, int numberOfPassengers) {
        switch (type){
            case TRUCK : return new Truck(numberOfPassengers);
            case SEDAN : return new Sedan(numberOfPassengers);
            case CABRIOLET : return new Cabriolet(numberOfPassengers);
            default: return null;

        }
    }

    public void fill(double numberOfLiters) throws Exception
    {

            if (numberOfLiters < 0)
            {
                throw new Exception();
            }
                fuel += numberOfLiters;
    }

    private boolean canPassengersBeTransferred() {
        if(isDriverAvailable() && fuel > 0) return true;
        else return false;
    }
    public boolean isSummer(Date date , Date summerStart, Date summerEnd) {
        return date.after(summerStart) && date.before(summerEnd);
    }
    public double getWinterConsumption(int length) {
        return length * winterFuelConsumption + winterWarmingUp;
    }
    public double getSummerConsumption(int length) {
        return length * summerFuelConsumption;
    }

    public double getTripConsumption(Date date, int length, Date SummerStart, Date SummerEnd)
    {
        double consumption;

        if(!isSummer(date, SummerStart, SummerEnd)) {
            consumption = getWinterConsumption(length);
        }
        else {
            consumption = getSummerConsumption(length);
        }
        return consumption;
    }

    public int getNumberOfPassengersCanBeTransferred() {
        if (!canPassengersBeTransferred()) return 0;
        return numberOfPassengers;
    }

    public boolean isDriverAvailable() {
        return driverAvailable;
    }

    public void setDriverAvailable(boolean driverAvailable) {
        this.driverAvailable = driverAvailable;
    }

    public void startMoving() {

        if (numberOfPassengers > 0) {
            fastenPassengersBelts();
        }
        fastenDriverBelt();
    }

    public void fastenPassengersBelts() {
    }

    public void fastenDriverBelt() {
    }

    public abstract int getMaxSpeed();
}


public class Truck extends Car
{

    public Truck(int numberOfPassengers)
    {
        super(Car.TRUCK, numberOfPassengers);
    }

    @Override
    public int getMaxSpeed() {
    final int MAX_TRUCK_SPEED = 80;
    return MAX_TRUCK_SPEED;
}
}


public class Sedan extends Car
{
    protected Sedan(int numberOfPassengers)
    {
        super(Car.SEDAN, numberOfPassengers);
    }

    @Override
    public int getMaxSpeed()
    {
        final int MAX_SEDAN_SPEED = 120;
        return MAX_SEDAN_SPEED;
    }
}


public class Cabriolet extends Car
{
    public Cabriolet(int numberOfPassengers)
    {
        super(Car.CABRIOLET, numberOfPassengers);
    }

    @Override
    public int getMaxSpeed()
    {
        final int MAX_CABRIOLET_SPEED = 90;
        return MAX_CABRIOLET_SPEED;
    }
}
  • ,

level04.lesson16.home03 - не проходит тестирование

package com.javarush.test.level04.lesson16.home03;
import java.io.*;
/* Посчитать сумму чисел
Вводить с клавиатуры числа и считать их сумму. Если пользователь ввел -1, вывести на экран сумму и завершить программу. -1 должно учитываться в сумме.
*/
public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int sum=0;
for(;true;)
{
String a1 = reader.readLine();
int a = Integer.parseInt(a1);
if (a>0 || a<0)
System.out.println(sum=sum+a);
if (a == -1)
break;
}
}
}

Всем привет, помогите плиз решить задачу. Данные выводятся согласно условию, но тестирование не проходит.
пример вывода данных в IDEA:
C:\Program Files\Java\jdk1.7.0_79\bin\java" -Didea.launcher.port=7547 "…
2
2
2
4
4
8
2
10
-2
8
10
18
-1
17

Process finished with exit code 0

Решение согласно условию. Я уже жену подключал, правильно ли я условия понял, вроде как да. Но тестирование не проходит.
  • ,

level39.lesson09.big01 задание 4

Вроде все работает как надо. Возможно я не верно понимаю описание методов. В чем может быть причина?

Задание 4

Реализуй интерфейс EventQuery у класса LogParser:
4.1. Метод getNumberOfAllEvents() должен возвращать количество различных типов
событий за указанный период.
4.2. Метод getAllEvents() должен возвращать события за указанный период.
4.3. Метод getEventsForIP() должен возвращать события, которые происходили с
указанного IP.
4.4. Метод getEventsForUser() должен возвращать события, которые инициировал
определенный пользователь.
4.5. Метод getFailedEvents() должен возвращать события, которые не выполнились.
4.6. Метод getErrorEvents() должен возвращать события, которые завершились
ошибкой.
4.7. Метод getNumberOfAttemptToSolveTask() должен возвращать количество попыток
решить определенную задачу.
4.8. Метод getNumberOfSuccessfulAttemptToSolveTask() должен возвращать количество
успешных решений определенной задачи.
4.9. Метод getAllSolvedTasksAndTheirNumber() должен возвращать мапу (номер_задачи:
количество_попыток_решить_ее).
4.10. Метод getAllDoneTasksAndTheirNumber() должен возвращать мапу (номер_задачи:
сколько_раз_ее_решили).


package com.javarush.test.level39.lesson09.big01;

import com.javarush.test.level39.lesson09.big01.query.DateQuery;
import com.javarush.test.level39.lesson09.big01.query.EventQuery;
import com.javarush.test.level39.lesson09.big01.query.IPQuery;
import com.javarush.test.level39.lesson09.big01.query.UserQuery;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class LogParser implements IPQuery, UserQuery, DateQuery, EventQuery
{
    private Path logDir;

    public LogParser(Path logDir)
    {
        this.logDir = logDir;
    }

    private ArrayList<Log> getLogsBetweenDates(Date after, Date before)
    {
        File[] logFiles = logDir.toFile().listFiles(new FilenameFilter()
        {
            @Override
            public boolean accept(File dir, String name)
            {
                return name.endsWith(".log");
            }
        });

        ArrayList<Log> listLogs = new ArrayList<>();
        for (File logFile : logFiles)
        {
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(Files.newInputStream(logFile.toPath()))))
            {
                while (reader.ready())
                {
                    try
                    {
                        String string = reader.readLine();
                        Log log = parseStringToLog(string);

                        if ((after == null || after.getTime() <= log.getDate().getTime()) && (before == null || log.getDate().getTime() <= before.getTime()))
                        {
                            listLogs.add(log);
                        }
                    }
                    catch (Exception e)
                    {

                    }
                }
            }
            catch (IOException e)
            {

            }
        }
        return listLogs;
    }

    private Log parseStringToLog(String string)throws Exception
    {
        //146.34.15.5	Eduard Petrovich Morozko	05.01.2021 20:22:55	DONE_TASK 48	FAILED
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");                                                                      //05.01.2021 20:22:55
        Pattern pattern = Pattern.compile("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\s" +                                                     //IP
                "(\\D*)\\s" +                                                                                          //userName
                "(\\d{2}\\.\\d{2}\\.\\d{4}\\s\\d{2}\\:\\d{2}\\:\\d{2})\\s" +                                           //Date
                "(\\w*)\\s?" +                                                                                         //Event
                "(\\d*){0,1}\\s" +                                                                                     //eventValue
                "(\\D*)");                                                                                             //Status

        Matcher matcher = pattern.matcher(string);
        matcher.find();

        String ip = matcher.group(1);
        String userName = matcher.group(2);
        Date date = sdf.parse(matcher.group(3));
        Event event = Event.valueOf(matcher.group(4));
        String eventValue = matcher.group(5);
        Status status = Status.valueOf(matcher.group(6));

        return new Log(ip, userName, date, event, eventValue, status);
    }

    private class Log
    {
        //ip username date event status
        private String ip;
        private String userName;
        private Date date;
        private Event event;
        private String eventValue;
        private Status status;

        public Log(String ip, String userName, Date date, Event event,String eventValue, Status status)
        {
            this.ip = ip;
            this.userName = userName;
            this.date = date;
            this.event = event;
            this.eventValue = eventValue;
            this.status = status;
        }

        public String getIp()
        {
            return ip;
        }

        public String getUserName()
        {
            return userName;
        }

        public Date getDate()
        {
            return date;
        }

        public Event getEvent()
        {
            return event;
        }

        public Status getStatus()
        {
            return status;
        }

        public String getEventValue()
        {
            return eventValue;
        }
    }

    @Override
    public int getNumberOfUniqueIPs(Date after, Date before)
    {
        return getUniqueIPs(after, before).size();
    }

    @Override
    public Set<String> getUniqueIPs(Date after, Date before)
    {
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        Set<String> uniqIps = new HashSet<>();

        for (Log log : logs)
        {
            if (!uniqIps.contains(log.getIp()))
            {
                uniqIps.add(log.getIp());
            }
        }

        return uniqIps;
    }

    @Override
    public Set<String> getIPsForUser(String user, Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && !users.contains(log.getIp()))
            {
                users.add(log.getIp());
            }
        }
        return users;
    }

    @Override
    public Set<String> getIPsForEvent(Event event, Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(event) && !users.contains(log.getIp()))
            {
                users.add(log.getIp());
            }
        }
        return users;
    }

    @Override
    public Set<String> getIPsForStatus(Status status, Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getStatus().equals(status) && !users.contains(log.getIp()))
            {
                users.add(log.getIp());
            }
        }
        return users;
    }

    @Override
    public Set<String> getAllUsers()
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(null, null);
        for (Log log : logs)
        {
            if (!users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public int getNumberOfUsers(Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (!users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users.size();
    }

    @Override
    public int getNumberOfUserEvents(String user, Date after, Date before)
    {
        int i = 0;
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getUserName().equals(user))
            {
                i++;
            }
        }
        return i;
    }

    @Override
    public Set<String> getUsersForIP(String ip, Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getIp().equals(ip) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getLoggedUsers(Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.LOGIN) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getDownloadedPluginUsers(Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.DOWNLOAD_PLUGIN) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getWroteMessageUsers(Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.WRITE_MESSAGE) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getSolvedTaskUsers(Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.SOLVE_TASK) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getSolvedTaskUsers(Date after, Date before, int task)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.SOLVE_TASK) && log.getEventValue().equals(String.valueOf(task)) && !users.contains(log.getIp()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getDoneTaskUsers(Date after, Date before)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.DONE_TASK) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<String> getDoneTaskUsers(Date after, Date before, int task)
    {
        Set<String> users = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.DONE_TASK) && log.getEventValue().equals(String.valueOf(task)) && !users.contains(log.getUserName()))
            {
                users.add(log.getUserName());
            }
        }
        return users;
    }

    @Override
    public Set<Date> getDatesForUserAndEvent(String user, Event event, Date after, Date before)
    {
        Set<Date> dates = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && log.getEvent().equals(event))
            {
                dates.add(log.getDate());
            }
        }
        return dates;
    }

    @Override
    public Set<Date> getDatesWhenSomethingFailed(Date after, Date before)
    {
        Set<Date> dates = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getStatus().equals(Status.FAILED) && !dates.contains(log.getDate()))
            {
                dates.add(log.getDate());
            }
        }
        return dates;
    }

    @Override
    public Set<Date> getDatesWhenErrorHappened(Date after, Date before)
    {
        Set<Date> dates = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getStatus().equals(Status.ERROR) && !dates.contains(log.getDate()))
            {
                dates.add(log.getDate());
            }
        }
        return dates;
    }

    @Override
    public Date getDateWhenUserLoggedFirstTime(String user, Date after, Date before)
    {
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        Date date = null;
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && log.getEvent().equals(Event.LOGIN))
            {
                date = date == null? log.getDate() : date.getTime() > log.getDate().getTime()? log.getDate() : date;
            }
        }
        return date;
    }

    @Override
    public Date getDateWhenUserSolvedTask(String user, int task, Date after, Date before)
    {
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        Date date = null;
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && log.getEvent().equals(Event.SOLVE_TASK) && log.getEventValue().equals(String.valueOf(task)))
            {
                date = date == null? log.getDate() : date.getTime() > log.getDate().getTime()? log.getDate() : date;
            }
        }
        return date;
    }

    @Override
    public Date getDateWhenUserDoneTask(String user, int task, Date after, Date before)
    {
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        Date date = null;
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && log.getEvent().equals(Event.DONE_TASK) && log.getEventValue().equals(String.valueOf(task)))
            {
                date = date == null? log.getDate() : date.getTime() > log.getDate().getTime()? log.getDate() : date;
            }
        }
        return date;
    }

    @Override
    public Set<Date> getDatesWhenUserWroteMessage(String user, Date after, Date before)
    {
        Set<Date> dates = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && log.getEvent().equals(Event.WRITE_MESSAGE) && !dates.contains(log.getDate()))
            {
                dates.add(log.getDate());
            }
        }
        return dates;
    }

    @Override
    public Set<Date> getDatesWhenUserDownloadedPlugin(String user, Date after, Date before)
    {
        Set<Date> dates = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getUserName().equals(user) && log.getEvent().equals(Event.DOWNLOAD_PLUGIN) && !dates.contains(log.getDate()))
            {
                dates.add(log.getDate());
            }
        }
        return dates;
    }

    @Override
    public int getNumberOfAllEvents(Date after, Date before)
    {
        Set<Event> events = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (!events.contains(log.getEvent()))
            {
                events.add(log.getEvent());
            }
        }
        return events.size();
    }

    @Override
    public Set<Event> getAllEvents(Date after, Date before)
    {
        Set<Event> events = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            events.add(log.getEvent());
        }
        return events;
    }

    @Override
    public Set<Event> getEventsForIP(String ip, Date after, Date before)
    {
        Set<Event> events = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getIp().equals(ip))
            {
                events.add(log.getEvent());
            }
        }
        return events;
    }

    @Override
    public Set<Event> getEventsForUser(String user, Date after, Date before)
    {
        Set<Event> events = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getUserName().equals(user))
            {
                events.add(log.getEvent());
            }
        }
        return events;
    }

    @Override
    public Set<Event> getFailedEvents(Date after, Date before)
    {
        Set<Event> events = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getStatus().equals(Status.FAILED))
            {
                events.add(log.getEvent());
            }
        }
        return events;
    }

    @Override
    public Set<Event> getErrorEvents(Date after, Date before)
    {
        Set<Event> events = new HashSet<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getStatus().equals(Status.ERROR))
            {
                events.add(log.getEvent());
            }
        }
        return events;
    }

    @Override
    public int getNumberOfAttemptToSolveTask(int task, Date after, Date before)
    {
        int i = 0;
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.SOLVE_TASK) && log.getEventValue().equals(String.valueOf(task)))
            {
                i++;
            }
        }
        return i;
    }

    @Override
    public int getNumberOfSuccessfulAttemptToSolveTask(int task, Date after, Date before)
    {
        int i = 0;
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.SOLVE_TASK) && log.getEventValue().equals(String.valueOf(task)) && log.getStatus().equals(Status.OK))
            {
                i++;
            }
        }
        return i;
    }

    @Override
    public Map<Integer, Integer> getAllSolvedTasksAndTheirNumber(Date after, Date before)
    {
        Map<Integer, Integer> taskSolved = new HashMap<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.SOLVE_TASK))
            {
                int task = Integer.parseInt(log.getEventValue());
                if (taskSolved.containsKey(task))
                {
                    taskSolved.put(task, taskSolved.get(task) + 1);
                }else
                {
                    taskSolved.put(task, 1);
                }
            }
        }
        return taskSolved;
    }

    @Override
    public Map<Integer, Integer> getAllDoneTasksAndTheirNumber(Date after, Date before)
    {
        Map<Integer, Integer> taskDone = new HashMap<>();
        ArrayList<Log> logs = getLogsBetweenDates(after, before);
        for (Log log : logs)
        {
            if (log.getEvent().equals(Event.DONE_TASK))
            {
                int task = Integer.parseInt(log.getEventValue());
                if (taskDone.containsKey(task))
                {
                    taskDone.put(task, taskDone.get(task) + 1);
                }else
                {
                    taskDone.put(task, 1);
                }
            }
        }
        return taskDone;
    }
}
  • ,

level26.lesson15.big01 задание 4

Задание 4
1. Выберем операцию, с которой мы сможем начать.
Подумаем. В банкомате еще денег нет, поэтому INFO и WITHDRAW протестить не получится.
Начнем с операции DEPOSIT — поместить деньги.
Считаем с консоли код валюты, потом считаем номинал и количество банкнот, а потом добавим их в манипулятор.

2. Чтобы считать код валюты, добавим статический метод String askCurrencyCode() в ConsoleHelper.
Этот метод должен предлагать пользователю ввести код валюты, проверять, что код содержит 3 символа.
Если данные некорректны, то сообщить об этом пользователю и повторить.
Если данные валидны, то перевести код в верхний регистр и вернуть.

3. Чтобы считать номинал и количество банкнот, добавим статический метод String[] getValidTwoDigits(String currencyCode) в ConsoleHelper.
Этот метод должен предлагать пользователю ввести два целых положительных числа.
Первое число — номинал, второе — количество банкнот.
Никаких валидаторов на номинал нет. Т.е. 1200 — это нормальный номинал.
Если данные некорректны, то сообщить об этом пользователю и повторить.
Пример вводимых данных:
200 5

4. В классе CurrencyManipulator создайте метод void addAmount(int denomination, int count),
который добавит введенные номинал и количество банкнот

5. Пора уже увидеть приложение в действии.
В методе main захардкодь логику пункта 1.
Кстати, чтобы не было проблем с тестами на стороне сервера, добавь в метод main первой строчкой Locale.setDefault(Locale.ENGLISH);
Запускаем, дебажим, смотрим.

2-3 пункты
package com.javarush.test.level26.lesson15.big01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created by sony on 27.08.2016.
 */
public class ConsoleHelper {
    private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

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

    public static String readString(){
        String s = "";

        try {
            s = reader.readLine();
        } catch (IOException e) {

        }
        return s;
    }

    static String askCurrencyCode(){
        String code;

        writeMessage("Input currency code:");

        while (true){
            code = readString();
            if(code.matches("\\w{3}")){
                break;
            }else
                writeMessage("Invalid currency code, retry.");
        }

        return code.toUpperCase();
    }

    static String[] getValidTwoDigits(String currencyCode){

        String valueAndAmount;
        String[] result;
        writeMessage("Input nominal and amount:");

        while (true) {
            valueAndAmount = readString();
            if (valueAndAmount.matches("\\d+ \\d+")) {
                result = valueAndAmount.split(" ");
                if(result[0].equals("0") || result[1].equals("0")){
                    writeMessage("Invalid nominal and amount, retry.");
                    continue;
                }
                return result;
            } else{
                writeMessage("Invalid nominal and amount, retry.");
            }
        }



    }
}


4 пункт
package com.javarush.test.level26.lesson15.big01;


import java.util.HashMap;
import java.util.Map;
public class CurrencyManipulator
{
    private String currencyCode;
    private Map<Integer, Integer> denominations;
    public String getCurrencyCode()
    {
        return currencyCode;
    }
    public CurrencyManipulator(String currencyCode)
    {
        this.currencyCode = currencyCode;
    }

    void addAmount(int denomination, int count){
        if(denominations == null){
            denominations = new HashMap<Integer, Integer>();
        }

        if(denominations.containsKey(denomination))
        {
            denominations.put(denomination, denominations.get(denomination) + count);
        }
        else
        {
            denominations.put(denomination, count);
        }
    }
}


1 пункт.
package com.javarush.test.level26.lesson15.big01;

import java.util.Locale;

/**
 * Created by sony on 27.08.2016.
 */
public class CashMachine {
    public static void main(String[] args) {
        Locale.setDefault(Locale.ENGLISH);
        String code = ConsoleHelper.askCurrencyCode();
        String[] digits = ConsoleHelper.getValidTwoDigits(code);
        CurrencyManipulator currencyManipulator = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(code);
        currencyManipulator.addAmount(Integer.parseInt(digits[0]), Integer.parseInt(digits[1]));

    }
}


package com.javarush.test.level26.lesson15.big01;


import java.util.HashMap;
import java.util.Map;

/**
 * Created by sony on 27.08.2016.
 */
public class CurrencyManipulatorFactory
{
    private CurrencyManipulatorFactory()
    {
    }
    private static Map<String,CurrencyManipulator> manipulators = new HashMap<String, CurrencyManipulator>();
    public static CurrencyManipulator getManipulatorByCurrencyCode(String currencyCode){
        if (manipulators.containsKey(currencyCode)) return manipulators.get(currencyCode);
        CurrencyManipulator newManipulator = new CurrencyManipulator(currencyCode);
        manipulators.put(currencyCode,newManipulator);
        return newManipulator;
    }
}
  • ,

level22.lesson09.task03

package com.javarush.test.level22.lesson09.task03;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;


/* Составить цепочку слов
В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом.
В методе getLine используя StringBuilder расставить все слова в таком порядке,
чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр.
Каждое слово должно участвовать 1 раз.
Метод getLine должен возвращать любой вариант.
Слова разделять пробелом.
В файле не обязательно будет много слов.

Пример тела входного файла:
Киев Нью-Йорк Амстердам Вена Мельбурн

Результат:
Амстердам Мельбурн Нью-Йорк Киев Вена
*/
public class Solution {
    public static void main(String[] args) throws IOException {

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

        BufferedReader br = new BufferedReader(new FileReader(name));
        StringBuilder sb = new StringBuilder("");
        String line;
        //-----------------------читаем слова
        while((line = br.readLine()) != null){
            sb.append(line+" ");
        }
        br.close();
        //--------------------добавляем в наш метод массив слов, разделенных " "
        sb = getLine(sb.toString().split(" "));
        System.out.println(sb.toString());
    }

    public static StringBuilder getLine(String... words) {
        //----------------Проверка
        if (words == null || words.length == 0)
            return new StringBuilder();
        if ("".equals(words[0]) || words.length == 1)
            return new StringBuilder(words[0]);


//----------- добавляем наши слова в список
        List<String> list = new ArrayList<String>();
        for(String e : words){
            list.add(e);
        }

        boolean isCorrect;


        while (true){
            Collections.shuffle(list);
            isCorrect = true;
//-----------проверка правильной последовательности
            for(int i = 0; i < list.size(); i++){
                if(i+1 != list.size()){
                    if(!list.get(i).substring(list.get(i).length()-1).equals(list.get(i+1).substring(0, 1).toLowerCase())){
                        isCorrect = false;
                        break;
                    }
                }
            }
            if(isCorrect)
                break;

        }
//----------создаем наш возвращаемый объект
        StringBuilder sb = new StringBuilder("");
        sb.append(list.get(0));

        for(int i = 1; i < list.size(); i++){
            sb.append(" "+list.get(i));
        }

        return sb;
    }
}