• ,

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;
    }
}
  • ,

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;
    }
}
  • ,

level18.lesson10.bonus03

Не проходит проверку, хотя код работает. В чем здесь ошибка?
Прайсы 2
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id — 8 символов
productName — название товара, 30 chars (60 bytes)
price — цена, 8 символов
quantity — количество, 4 символа
-u — обновляет данные товара с заданным id
-d — производит физическое удаление товара с заданным 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 ArrayList<String> list = new ArrayList<String>();
    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String name = reader.readLine();
        reader.close();
        InputStream inputStream = new FileInputStream(name);
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "WINDOWS-1251");
        BufferedReader file = new BufferedReader(inputStreamReader);

        while (file.ready())
        {
            String str = file.readLine();

            String y = str.substring(0, 8).trim();

            if (args[1].equals(y))
            {
                if (args[0].equals("-u")) {
                    String productName = args[2];
                    for (int k = 3; k < args.length - 2; k++)
                    {
                        productName += " " + args[k];
                    }
                    str = String.format("%-8.8s%-30.30s%-8.8s%-4.4s", args[1], productName, args[args.length - 2], args[args.length - 1]);
                    list.add(str);
                }

                else continue;
            }

            else list.add(str);
        }

        file.close();
        inputStreamReader.close();
        inputStream.close();

        OutputStream outStream = new FileOutputStream(name);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outStream, "WINDOWS-1251");
        BufferedWriter fileWR = new BufferedWriter(outputStreamWriter);

        for (int i = 0; i < list.size(); i++)
        {
            if (list.get(i).equals("")) continue;
            fileWR.write(String.format("%s%n", list.get(i)));
        }

        fileWR.close();
        outputStreamWriter.close();
        outStream.close();
    }
}
  • ,

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;


/* Составить цепочку слов
В методе 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();
        //--------------------добавляем в наш метод массив слов, разделенных " "
        StringBuilder result = getLine(sb.toString().split(" "));
        System.out.println(result.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]);

        StringBuilder sb = new StringBuilder("");

        //----------------запоминаем длинну нашей строки
        StringBuilder sb1 = new StringBuilder("");
        for(String s : words){
            sb1.append(s+" ");
        }
        //----------------запоминаем индекс тех слов, которые отбрасываем при составлении цепочки
        StringBuilder flag = new StringBuilder(" 0 ");

        sb.append(words[0]);
        for(int i = 1; ; i++){
            // проверяем последнюю букву цепочки(переворачивая) и первую букву нашего слова
            if(sb.reverse().toString().substring(0,1).toLowerCase().equals(words[i].substring(0,1).toLowerCase()) && !flag.toString().contains(" "+i+" ") ){
                sb.reverse();
                sb.append(" "+words[i]);
                flag.append(" "+i+" ");
            }else sb.reverse();

            if(i+1 == words.length){
                i = 0;
            }
            //-----------------выходим из цикла если длина нашей отсортированной цепочки совпадает с длинной неотсортированной цепочки
            if(sb.toString().length() == sb1.toString().length()-1){
                break;
            }
        }
        return sb;
    }
}

level05.lesson12.home05

Помогите пожалуйста. Написал программу. Вроде работает правильно, но с костылём. Никак не проходит тестирование.
/*
Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.
*/
  • ,

level22.lesson05.task01

Что не так?

package com.javarush.test.level22.lesson05.task01;

/* Найти подстроку
Метод getPartOfString должен возвращать подстроку начиная с символа после 1-го пробела и до конца слова,
которое следует после 4-го пробела.
Пример: "JavaRush - лучший сервис обучения Java."
Результат: "- лучший сервис обучения"
На некорректные данные бросить исключение TooShortStringException (сделать исключением).
Сигнатуру метода getPartOfString не менять.
Метод main не участвует в тестировании.
*/
public class Solution
{
    public static String getPartOfString(String string) throws TooShortStringException
    {
        String[] res = string.split(" ");
        String result = "";
        if(res.length<5)
            throw new TooShortStringException();
        else
        {
            for (int i = 1; i <= 4; i++)
            {
                result += res[i] + " ";
            }
        }
        return result.substring(0,result.length()-1);
    }

    public static class TooShortStringException extends Exception
    {
        TooShortStringException()
        {
            System.out.println("String too short!");
        }
    }

    public static void main(String[] args) throws Exception
    {
        try
        {
            System.out.println(getPartOfString("JavaRush - лучший сервис обучения Java."));
        }
        catch (TooShortStringException ex){}
    }
}

бонус 02. 6 LvL. урок 11 Все работает но видимо не все. Сервер не принимает...

package com.javarush.test.level06.lesson11.bonus02;

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

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

Пример ввода:
дедушка Вася
бабушка Мурка
папа Котофей
мама Василиса
сын Мурчик
дочь Пушинка

Пример вывода:
Cat name is дедушка Вася, no mother, no father
Cat name is бабушка Мурка, no mother, no father
Cat name is папа Котофей, no mother, father is дедушка Вася
Cat name is мама Василиса, mother is бабушка Мурка, no father
Cat name is сын Мурчик, mother is мама Василиса, father is папа Котофей
Cat name is дочь Пушинка, mother is мама Василиса, father is папа Котофей
*/

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

        String grandFather = reader.readLine();
        Cat catGrandFatherName = new Cat(grandFather);

        String grandMother = reader.readLine();
        Cat catGrandMotherName = new Cat(grandMother);

        String fatherName = reader.readLine();
        Cat catFatherName = new Cat(fatherName, null, catGrandFatherName);

        String motherName = reader.readLine();
        Cat catMotherName = new Cat(motherName, catGrandMotherName, null);

        String sonName = reader.readLine();
        Cat catSonName = new Cat(sonName, catMotherName, catFatherName);

        String daughterName = reader.readLine();
        Cat catDaughter = new Cat(daughterName, catMotherName, catFatherName);

        System.out.println(catGrandFatherName);
        System.out.println(catGrandMotherName);
        System.out.println(catFatherName);
        System.out.println(catMotherName);
        System.out.println(catSonName);
        System.out.println(catDaughter);

        reader.close();
    }

    public static class Cat
    {
        private String name;
        private Cat parentMother;
        private Cat parentFather;

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

        Cat(String name, Cat parentMother, Cat parentFather)
        {
            this.name = name;
            this.parentMother = parentMother;
            this.parentFather = parentFather;
        }

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

}

level15.lesson12.home09 нельзя юзать StringBuffer?


package com.javarush.test.level15.lesson12.home09;

/* Парсер реквестов
Считать с консоли URl ссылку.
Вывести на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15).
URL содержит минимум 1 параметр.
Если присутствует параметр obj, то передать его значение в нужный метод alert.
alert(double value) - для чисел (дробные числа разделяются точкой)
alert(String value) - для строк

Пример 1
Ввод:
http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo
Вывод:
lvl view name

Пример 2
Ввод:
http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo
Вывод:
obj name
double 3.14
*/

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 url = reader.readLine();
        String[] frag = url.split("\\?");
        String[] frag1 = frag[1].split("&");
        StringBuffer  bf = new StringBuffer();
        int k;
        for (int i = 0; i < frag1.length; i++){
            k = frag1[i].indexOf("=");
            if (k < 0 ){
                bf.append(frag1[i]).append(" ");
            }
            else  bf.append(frag1[i].substring(0, k)).append(" ");

        }
        bf.setLength(bf.length()-1);
        System.out.println(bf);
        for (int i = 0; i < frag1.length; i++){
            k = frag1[i].indexOf("=");
            if (frag1[i].contains("obj")){
                try {
                    double d = Double.parseDouble(frag1[i].substring(4));
                    alert(d);
                }
                catch (NumberFormatException e){
                    alert(frag1[i].substring(k+1));
                }
            }
        }
    }
    public static void alert(double value) {
        System.out.println("double " + value);
    }

    public static void alert(String value) {
        System.out.println("String " + value);
    }
}
  • ,

level10.lesson04.task03 не проходит тест, так же, как и level10.lesson04.task04

package com.javarush.test.level10.lesson04.task03;

/* Задача №3 на преобразование целых типов
Добавить одну операцию по преобразованию типа, чтобы получался ответ: b=0
float f = (float)128.50;
int i = (int)f;
int b = (int)(i + f);
*/

public class Solution
{
    public static void main(String[] args)
    {
        float f = (float)128.50;
        int i = (int)f;
        int b = (int)((byte)(i + f));
        System.out.println(b);
    }
}

package com.javarush.test.level10.lesson04.task04;

/* Задача №4 на преобразование целых типов
Добавить одну операцию по преобразованию типа, чтобы получался ответ: nine=9
short number = 9;
char zero = '0';
int nine = (zero + number);
*/

public class Solution
{
    public static void main(String[] args)
    {
        short number = 9;
        char zero = '0';
        int nine = zero + number;
        System.out.println((char)nine);

    }
}