Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 02.09.2018
Сообщений: 49

Проблема с LinkedList java.lang.AssertionError добавляется лишний пробел при Assert.assertEquals()

27.05.2019, 13:36. Показов 1668. Ответов 8

Студворк — интернет-сервис помощи студентам
Есть своя реализация LinkedList, пытаюсь ее протестировать с помощью junit, но получаю error из-за того что добавляется лишний пробел:
java.lang.AssertionError:
Expected :com.epam.lists.impl.LinkedListOwnImpl<D ; A; B; C; >*в этом месте пробел*
Actual :com.epam.lists.impl.LinkedListOwnImpl<D ; A; B; C; >

У меня была такая же проблема со своей реализацией ArrayList, проблема была в том что я забыл переопределить equals.
Но я не могу понять какие поля нужно включить в equlas в случае с LinkedList



Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public class LinkedListOwnImpl<T> implements LinkedListOwn<T> {
 
    private Node<T> firstNode;
    private Node<T> lastNode;
    private int size;
 
    public LinkedListOwnImpl() {
        lastNode = new Node<>(null, firstNode, null);
        firstNode = new Node<>(null, null, lastNode);
    }
 
    @Override
    public void addFirst(T element) {
        Node<T> newNext = firstNode;
        newNext.value = element;
        firstNode = new Node<>(null, null, newNext);
        newNext.prev = firstNode;
        while (getNextNode(newNext) != lastNode) {
            newNext = getNextNode(newNext);
        }
        lastNode.prev = newNext;
        size++;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof LinkedListOwnImpl)) return false;
        LinkedListOwnImpl<?> that = (LinkedListOwnImpl<?>) o;
        return size == that.size &&
                Objects.equals(firstNode, that.firstNode) &&
                Objects.equals(lastNode, that.lastNode);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(firstNode, lastNode, size);
    }
 
    @Override
    public String toString() {
        String str = "";
        Node<T> node = firstNode;
        while (getNextNode(node) != lastNode) {
            str += getNextNode(node).value.toString() + "; ";
            node = getNextNode(node);
        }
        return str;
    }
 
    private static class Node<T> {
        private T value;
        private Node<T> prev;
        private Node<T> next;
 
        Node(T value, Node<T> prev, Node<T> next) {
            this.value = value;
            this.prev = prev;
            this.next = next;
        }
 
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Node)) return false;
            Node<?> node = (Node<?>) o;
            return Objects.equals(value, node.value) &&
                    Objects.equals(prev, node.prev) &&
                    Objects.equals(next, node.next);
        }
 
        @Override
        public int hashCode() {
            return Objects.hash(value, prev, next);
        }
    }
}
Тест:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
 
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
 
public class LinkedListOwnImplTest {
 
    LinkedListOwn<String> linkedListOwn;
 
    @Before
    public void setUp() {
        linkedListOwn = new LinkedListOwnImpl<>();
        linkedListOwn.addLast("A");
        linkedListOwn.addLast("B");
        linkedListOwn.addLast("C");
    }
 
    @Test
    public void addFirst() {
        LinkedListOwn<String> expected = new LinkedListOwnImpl<>();
        expected.addLast("D");
        expected.addLast("A");
        expected.addLast("B");
        expected.addLast("C");
 
        linkedListOwn.addFirst("D");
 
        Assert.assertEquals(expected, linkedListOwn);
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2019, 13:36
Ответы с готовыми решениями:

При выводе из файла добавляется лишний символ
Есть содержимое файла: 12345 Once I caught a fish alive 45678910 Then I let it go again 111213314 Код выводит это...

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

Вопрос - добавляется лишний символ в письмо при отправке через phpmailer
Нужен ваш компетентный совет - при отправлении письма через phpmailer в код добавляется лишний символ - восклицательный знак, который...

8
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
27.05.2019, 14:01
marsianetss, обязательно читаем и учимся вот тут
проблема именно в иквалс, дебаггером пройди

Цитата Сообщение от marsianetss Посмотреть сообщение
Но я не могу понять какие поля нужно включить в equlas в случае с LinkedList
можно посмотреть в родном джавовском линкедлисте как там, но вообще подозреваю что два листа равны только если содержат одинаковые элементы в одинаковом порядке (тип листа типа линкедлистовнимплемент ессна должен тоже совпадать).
1
0 / 0 / 0
Регистрация: 02.09.2018
Сообщений: 49
27.05.2019, 14:26  [ТС]
Welemir1, Спасибо за ответ.
Цитата Сообщение от Welemir1 Посмотреть сообщение
но вообще подозреваю что два листа равны только если содержат одинаковые элементы в одинаковом порядке (тип листа типа линкедлистовнимплемент ессна должен тоже совпадать)
Я вроде так и сделал, буду разбираться
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
27.05.2019, 14:33
Цитата Сообщение от marsianetss Посмотреть сообщение
Я вроде так и сделал
а мне показалось, что ты только размер сравнил и последнюю-первую ноды.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
27.05.2019, 15:37
Возможно, я что-то не понимаю, но firstNode и lastNode объявлены же как private, а тут к ним напрямую обращаются
Java
1
2
Objects.equals(firstNode, that.firstNode) &&
                Objects.equals(lastNode, that.lastNode);
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
27.05.2019, 15:54
Цитата Сообщение от Gungala Посмотреть сообщение
а тут к ним напрямую обращаются
и что?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
27.05.2019, 16:42
xoraxax, ну тип, переменные ж private, все дела. К ним нельзя обращаться напрямую

Добавлено через 39 секунд
или там какие-то особые, неизвестные мне правила начинают работать?

Добавлено через 3 минуты
Балин, проверил, эт оказывается действительно работает. Не знал, что так можно. Всегда считал, что в любом случае надо через отдельный метод значение получать

Добавлено через 10 секунд
Чтож, каждый день узнаём что-то новое
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
27.05.2019, 16:45
Цитата Сообщение от Gungala Посмотреть сообщение
особые, неизвестные мне правила
там же обращение идет из того класса, в котором эти переменные и объявлены, так приват и работает - отовсюду фигушка, кроме того класса, где они объявлены. Или я тебя не понял? что не так?

Добавлено через 55 секунд
Цитата Сообщение от Gungala Посмотреть сообщение
в любом случае надо через отдельный метод значение получать
есть просто сторонники подхода, что если есть геттеры.-сеттеры то даже внутри класса ко всем переменным надо обращаться через них.
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
27.05.2019, 16:46
Welemir1, акей, спасибо, буду знать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2019, 16:46
Помогаю со студенческими работами здесь

Лишний пробел при редактировании запись из БД
помогите решить проблему при редактировании текста записанного в БД у текста после каждой запятой добавляется лишний пробел... ...

Лишний пробел при создании txt-файла
Вот код создания файла: if (isset($_GET)) { //Создание schedule.mss for ($i=1; $i&lt;=count($_SESSION); $i++) { ...

Как убрать лишний пробел при выводе?
Замучился, реально некто не знает что делать: #include &lt;iostream&gt; using namespace std; int power(int a,int n) { if(n==0) return...

Лишний пробел/строка при загрузке в Memo из файла
Добрый день! Следующая проблемка: Есть текстовый файл, откуда в несколько Memo загружается стандартным ReadLn по одной строке. ...

JIDEFX MaskTextField java.lang.NoSuchMethodError: java.lang.invoke.LambdaMetafactory.metaFactory
Имеется тестовое приложение: package testinputmask; import javafx.application.Application; import javafx.scene.Scene; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru