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

Уже который день сталкиваюсь с тем, что валидатор не принимает полностью рабочие задачи! На моем счету их уже накопилось целых три (думаю, скоро их будет гораздо больше) и над одной из них (com.javarush.task.task20.task2025) я просидел два дня, потом просто плюнул.
У меня вопрос. Как можно было так запороть проект просто поняв дизайн и изменив порядок задач?
Ведь на старой версии сайта все эти задачи без проблем принимались.
Я прекрасно знаю, что теперь открыт доступ к первой версии явараш, но нафига мне все эти танцы с бубном, чтобы откатиться? Выпустили сырой продукт, так ладно был бы это бесплатный сервис, но нет, люди платят деньги и ожидают получить качественный результат, и сейчас все просто тратят время на тестирование и поиск багов. Замечательно!
В общем вот список задач, которые не поддаются решению:
com.javarush.task.task20.task2025;
com.javarush.task.task30.task3002;
com.javarush.task.task30.task3008.big08.

+com.javarush.task.task30.task3010

Думаю, другие смогут накидать сюда гораздо больше таких задач, я тоже буду добавлять по мере нахождения.
Надеюсь, разработчики проекта очень оперативно решат проблемы со своим обновленным валидатором и не надо будет убивать пол дня на поиск несуществующих ошибок и гадании на кофейной гуще.

P.S. Новый дизайн проекта и плагина меня порадовал.

5 комментариев

Dolphin9767
по задаче: com.javarush.task.task30.task3008.big08.
Тоже долго мучился.

Вот подсказка:
Проверяйте имя на пустоту через «isEmpty()», а наличие через «containsKey(...)».
У меня прошло.
rembrand87
Так и есть, вот мой код
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
            while (true)
            {
                connection.send(new Message(MessageType.NAME_REQUEST));
                Message answer = connection.receive();
                if (answer.getType() == MessageType.USER_NAME)
                {
                    if (answer.getData() != null && !answer.getData().isEmpty() && !connectionMap.containsKey(answer.getData()))
                    {
                        connectionMap.put(answer.getData(), connection);
                        connection.send(new Message(MessageType.NAME_ACCEPTED));
                        return answer.getData();
                    }
                }
            }
        }


Пишет, что программа работала слишком долго, на jr1.0 прошло без проблем, значит это 100% глюк валидатора. Видимо у разработчиков не было желания довести все до ума.
Dolphin9767
У меня не было проверки на: answer.getData() != null.
Вчера прошол весь чат на JR 2.0.
apache888
подскажи что не так в коде
private static class Handler extends Thread {
        private Socket socket;

        public Handler(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {
//            SocketAddress socketAddress = null;
            if (socket != null && socket.getRemoteSocketAddress() != null) {
                ConsoleHelper.writeMessage("Established a new connection to a remote socket address: " + socket.getRemoteSocketAddress());
            }
            String userName = null;
//            String errorMessage = "An exchange of data error to a remote socket address: "; //+ socketAddress;
            try (Connection connection = new Connection(socket)) {
//                SocketAddress socketAddress = connection.getRemoteSocketAddress();
//                ConsoleHelper.writeMessage("Established a new connection to a remote socket address: " + connection.getRemoteSocketAddress());
                userName = serverHandshake(connection);
                sendBroadcastMessage(new Message(MessageType.USER_ADDED, userName));
                sendListOfUsers(connection, userName);
                serverMainLoop(connection, userName);
            } catch (IOException | ClassNotFoundException e) {
                ConsoleHelper.writeMessage("An exchange of data error to a remote socket address");
            } finally {
                if (userName != null) {
                    connectionMap.remove(userName);
                    sendBroadcastMessage(new Message(MessageType.USER_REMOVED, userName));
                }
                ConsoleHelper.writeMessage("Closed connection to a remote socket address: "); // + socketAddress);
            }
        }

        private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
            while (true) {
                connection.send(new Message(MessageType.NAME_REQUEST));
                Message answer = connection.receive();
//                if (answer != null && answer.getType() == MessageType.USER_NAME) {
                if (answer.getType() == MessageType.USER_NAME) {
//                    if (!answer.getData().equals("") && answer.getData() != null) {
                    if (!answer.getData().isEmpty()) {
                        if (!connectionMap.containsKey(answer.getData())) {
                            connectionMap.put(answer.getData(), connection);
                            connection.send(new Message(MessageType.NAME_ACCEPTED));
                            return answer.getData();
                        }
                    }
                }
            }
        }

        private void sendListOfUsers(Connection connection, String userName) throws IOException {
            for (Map.Entry<String, Connection> entry : connectionMap.entrySet()) {
                if (!entry.getKey().equals(userName)) {
                    connection.send(new Message(MessageType.USER_ADDED, entry.getKey()));
                }
            }
        }

        private void serverMainLoop(Connection connection, String userName) throws IOException, ClassNotFoundException {
            while (true) {
                Message message = connection.receive();
                if (message != null && message.getType() == MessageType.TEXT) {
                    sendBroadcastMessage(new Message(MessageType.TEXT, userName + ": " + message.getData()));
                } else {
                    ConsoleHelper.writeMessage("Error!");
                }
            }
        }
rembrand87
Да, спасибо, так и есть, на взгляд валидатора проверка на ноль вызывает бесконечный цикл ))).
В общем я сделал вывод, JR2.0 пока еще сыроват и уже прошел пару уровней на первой версии.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.