5 svar
137 visningar
Aedrha 96
Postad: 22 jul 2022 16:39

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!

Laguna Online 30711
Postad: 22 jul 2022 17:55

Är det i IDE:t eller webbportalen det blir fel när du försöker definiera toString? Hur ser koden och felmeddelandet ut?

Aedrha 96
Postad: 23 jul 2022 10:47

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:

Laguna Online 30711
Postad: 23 jul 2022 11:32

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?

Aedrha 96
Postad: 23 jul 2022 12:05
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.

Laguna Online 30711
Postad: 23 jul 2022 12:40

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.

Svara
Close