Förvirrande uppgift om att fylla en SingleLinkedList med rekursion.
Hej. Läser en Java kurs på distans. Vi har en webb portal med övningar och uppgiften jag sitter med nu är att jag ska skriva en rekursiv add-metod till följande klass.
public class SingleLinkedList<E> {
private ListNode<E> first;
public SingleLinkedList() {
first = null;
}
...
private static class ListNode<E> {
private E element;
private ListNode<E> next;
private ListNode(E e) {
element = e;
next = null
}
}
}
Så här skrev jag:
private void add(ListNode<E> node, E x) {
if (first == null) {
ListNode<E> node2 = new ListNode<E>(x);
first= node2;
}else if(node.next==null){
ListNode<E> node2 = new ListNode<E>(x);
node.next=node2;
}
else {
add(node.next, x);
}
}
Funka när jag testade i min IDE. Webb portalen gav det här resultatet.
Okej tänkte jag. Kanske ska skugga toString också då, och skriver en toString metod som ger en utskrift på det formatet som syns ovan. Får då felmeddelandet att toString redan är definierad i klassen.
Jag har ingen aning vad jag har gjort för fel här. Är det någon vänlig själ som kan se vart det går snett?
Tack och ha en trevlig helg!
Är det i IDE:t eller webbportalen det blir fel när du försöker definiera toString? Hur ser koden och felmeddelandet ut?
Webportalen, här är min toString:
public String toString() {
ListNode<E> n = first;
String print ="["+n.element;
n = n.next;
while (n != null) {
print=print+" ,"+n.element;
n = n.next;
}
print=print+"]";
return print;
}
Och felmeddelandet ser ut så här:
Kan du visa hela programmet?
Hur testade du i IDE:t? Samma input som webbportalen ger? Blev det nån skillnad med din egen toString?
public class SingleLinkedList<E> {
private ListNode<E> first;
public SingleLinkedList() {
first = null;
}
private static class ListNode<E> {
private E element;
private ListNode<E> next;
private ListNode(E e) {
element = e;
next = null;
}
}
public void add(E x) {
add(first, x);
}
public String toString() {
ListNode<E> n = first;
String print ="["+n.element;
n = n.next;
while (n != null) {
print=print+" ,"+n.element;
n = n.next;
}
print=print+"]";
return print;
}
private void add(ListNode<E> node, E x) {
if (first == null) {
ListNode<E> node2 = new ListNode<E>(x);
first= node2;
}else if(node.next==null){
ListNode<E> node2 = new ListNode<E>(x);
node.next=node2;
}
else {
add(node.next, x);
}
}
}
Det är all kod jag har tillgänglig övriga metoder och koden som körs på webportalen ser jag inte där av min förvirring. När jag kör:
public class SingleLinkedListTest {
public static void main(String[] args) {
SingleLinkedList<Integer> list = new SingleLinkedList <Integer>();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
//list.print();
System.out.println(list);
}
}
Får jag exakt den utskriften som söks.
Jag förstår inte varför webbportalen inte får någon utskrift alls. Kan inte se deras toString metod så vet inte hur den funkar.
Undrar hur den får det att vara rad 38 som toString definieras på.
Jag tror inte jag kan bidra med mer hjälp. Hoppas nån annan vet nåt.