Я создал связанный список с функциями вставки, поиска и удаления. Я также создал для этого итератор. Теперь предположим, что я делаю это:
myList<Integer> test = new myList();
test.insert(30);
test.insert(20);
test.insert(10);
myList.iterator it = test.search(20);
if(it.hasNext())
System.out.println(it.next());
И вуаля, это работает (печатает значение элемента в узле, в данном случае 20). Теперь, если я сделаю это:
myList<Double> test = new myList();
test.insert(30.1);
test.insert(20.1);
test.insert(10.1);
myList.iterator it = test.search(20.1);
if(it.hasNext())
System.out.println(it.next());
Нет, потому что итератор указывает на ноль. Вот реализация функции поиска:
public iterator search(T data)
{
no<T> temp = first;
while( (temp != null) && (temp.data != data) )
temp = temp.next;
return (new iterator(temp));
}
Вот как я узнаю, что в сравнениях есть что-то подозрительное: если я изменю часть вышеприведенного кода следующим образом:
while( (temp != null) && (temp.data != data) )
System.out.println(temp.data + " " + data);
temp = temp.next;
Я вижу, как он печатает числа в списке. Он печатает, в какой-то момент, «20,1 20,1» (например). Так как я могу это исправить? Функция кажется правильной, но кажется, что Java неправильно сравнивает числа.
РЕДАКТИРОВАТЬ: wth, BigDecimal дал мне такую же проблему.
РЕДАКТИРОВАТЬ 2: equals () работал, не понимал, что что-то еще было неправильно. К сожалению.