Я работал над упражнением, чтобы лучше понять Linked List.
Мой выход:
*** DISPALY NAMES Miki null Arek null Magi null
Проблема: отображение нулей между именами.
Пытался сделать: написал множество операторов печати, и похоже, что добавляет в список дополнительный объект ссылки на имя. Я пытался найти ошибку в методе добавления, но логически все штрафы для меня.
Мне не разрешено использовать LinkedList API.
Спасибо за помощь.
<pre> <code>
public class NameTest {
public static void main(String[] args) {
NameList<Name> n = new NameList<Name>();
Name n1 = new Name(1,"Miki");
Name n2 = new Name(2, "Arek");
Name n3 = new Name(3, "Magi");
n.addName(n1);
n.addName(n2);
n.addName(n3);
n.displayNames();
System.out.println("*******************\n");
}
}
public class Name {
private int nameId;
private String firstName;
private Name next;
public Name() { }
public Name(int nameId, String firstName) {
super();
this.nameId = nameId;
this.firstName = firstName;
this.next = new Name();
}
public int getNameId() {
return nameId;
}
public void setNameId(int nameId) {
this.nameId = nameId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Name getNext() {
return next;
}
public void setNext(Name next) {
this.next = next;
}
}
public class NameList<T extends Name> {
private T head;
private int value;
public NameList() {
head = null;
value = 0;
}
public T getHead() {
return head;
}
public void setHead(T head) {
this.head = head;
}
public void addName(T name) {
if(head == null) {
setHead(name);
value++;
}
else {
T curr = getHead();
while(curr.getNext() != null) {
curr = (T) curr.getNext();
}
curr.setNext(name);
value++;
}
}
public void displayNames() {
System.out.println("***DISPLAY NAMES ");
T curr = getHead();
while(curr.getNext() != null ) {
System.out.println(curr.getFirstName());
curr = (T) curr.getNext();
}
if(curr.getNext() == null) {
System.out.println(curr.getFirstName());
}
}
Переменная экземпляра next в имени класса должна быть такой: private Name next; Прошу прощения за путаницу. Я сделал исправление в коде выше.
Ваша проблема в этой строке.
this.next = new Name();
Вы хотите добавить новый "пустой объект" на обратной стороне каждого Name
, которую вы добавляете. Удалите его, и вы получите желаемый результат. (Я предполагаю, что вы также имеете Name extends Employee
там где-то, иначе это не скомпилируется).
next = null;
но тебе не нужно. Переменные экземпляра типа объекта всегда по умолчанию равны нулю.