Int Array unwandeln in ListNode

Sebaaaa

Aktives Mitglied
Hallo hab ein kleines Problem.

Ich muss eine Liste aus einem int-Array durch ListNode erstellen
ArrayToList(int[] Items):


Das ist der Kopf.


Java:
	public static ListNode arrayToList(int[] items) {
	
		if(items ==null){ // deckt den Fall ab wenn das int-Array leer ist.
 			return null;  // soll dann auch null zurück geben.
		}
	   
		return null;
	}

Und mir stellt sich jetz die Frage ob ich das Array mit ner for-Schleife abgehen soll bzw. wie ich dann die Werte durch eine ListNode anzeigen kann.
Oder geht es irgentwie leichter?
 
Hi,
Und mir stellt sich jetz die Frage ob ich das Array mit ner for-Schleife abgehen soll bzw. wie ich dann die Werte durch eine ListNode anzeigen kann.
Oder geht es irgentwie leichter?
Wie genau sieht den die Klasse ListNode aus? Ist das eine selbst erstellte Klasse, oder von einer Library?
 
Java:
public class ListNode {
	private final int content;
	private ListNode successor;

	public ListNode(int content) {
		this.content = content;
	}

	public int getContent() {
		return content;
	}

	public void setSuccessor(ListNode node) {
		successor = node;
	}

	public ListNode getSuccessor() {
		return successor;
	}

Hab jetz schon weiter gemacht und bin jetz schon mal so weit
Java:
public static ListNode arrayToList(int[] items) {
		if(items ==null){
			return null;
		}
		
		for ( int i =0; i<items.length;i++){
			ListNode First = new ListNode(items[i]);
			
		}
	   
		return First; // Fehlermeldung bei First 
	}
jedoch funktioniert es noch nicht
vll kann mir hierbei jmd helfen
 
Ist das die ganze ListNode-Klasse?

Das ist ja eine verkettete Liste.. Da musst Du dann die einzelnen Elemente Deines übergebenen Arrays jeweils mit setSuccessor(ListNode) an den aktuellen ListNode anhängen.

Edit: Schau Dir mal sowas an (http://www.java-programmieren.com/listen-java.php). Das ist das gleiche wie ListNode, nur in grün. 😉
 
Zuletzt bearbeitet:
Ok macht Sinn danke.
Aber wie kann ich die Elemente allgemein an meine ListNode anhängen?
Also ohne genaue Werte zu haben bzw ohne die Länge meines Int-Arrays zu kennen?
 
Wenn du eine Listnode hast:
Java:
ListNode node = new ListNode(value);

kannst du einfach eine übergeben:
Java:
ListNode nextNode = new ListNode(value);
node.setSuccessor(nextNode )
 
Dann mache es doch in mehreren Schritten:
Erstelle ein Array für die ListNodes. Dann mache zuerst aus jedem Eintrag in deinem int-Array eine ListNode und füge die zu dem neuen Array hinzu

Im zweiten Schritt verknüpfst du dann die Elemente in deinem neuen Array.
 
Tust Du Dir damit noch schwer zu verstehen, wie das alles mit ListNode gehen soll?

Wie gesagt, das ganze ist eine -einfach- verkettete Liste. Das kannst du mal in Google eingeben und Dir genau anschauen (hatte ja auch schon ein Link gepostet). Eine weitere Idee, was das genau ist und wie das funktioniert, bekommst Du vlt. hier.
 
Tust Du Dir damit noch schwer zu verstehen, wie das alles mit ListNode gehen soll?

Wie gesagt, das ganze ist eine -einfach- verkettete Liste. Das kannst du mal in Google eingeben und Dir genau anschauen (hatte ja auch schon ein Link gepostet). Eine weitere Idee, was das genau ist und wie das funktioniert, bekommst Du vlt. hier.

Edit: sehe gerade, dass mein Link vorhin irgendwie nicht mitgepostet wurde?! Deshalb hier nochmal: Listen in Java - Was unterscheidet Listen von Arrays?

Edit: Huch! Ich wollte nicht zitieren, sondern editieren.. :/ Sorry an die Mods, war keine Absicht.
 
Zuletzt bearbeitet:
Joa ich hab grad schon 5 so kleine Aufgaben mit ListNode gemacht und die klappen alle aber bei der steh ich grad sehr auf der Leitung.
 
Dann versuch doch mal sowas (ich geb Dir mal n bisschen Pseudo-Code):

Code:
ListNode first = erstes Element aus dem Array;

ListNode aktuell = first;

ListNode neu;

for (zahl i; von zweitem Array-Elem. bis zum letzten) {
   neu = new ListNode(Inhalt von i-tem Array-Feld);
   aktuell.setNachfolger(neu);
   aktuell = neu;
}

return first;
 
Ok tausend Dank!
aber ich krieg schon in der ersten Zeile eine Fehlermeldung
Java:
ListNode first = erstes Element aus dem Array;
des erste Element aus meinem Array wäre
Java:
items[0]
Der Kopf ist ja
Java:
public static ListNode arrayToList(int[] items) {
;(
 
Ok ich weiß danke 😉
habs jetz soweit geschafft. (Vielen Dank)
Nur noch eins
Wenn der Fall eintretten sollte das das angegebene Array leer ist soll die Methode null zurück geben.
Habs jetz mehrmals mit if bzw if - else probiert aber immer wieder gescheitert.
Hat da vll noch jmd nen Tipp :bahnhof:?
 
Jedes Array hat die Eigenschaft "length", mit der Du die "Länge" des Arrays (also die Anzahl der Elemente) rausfinden kannst.

Dann kannst Du ja sowas bauen

Code:
if(Länge des Arrays gleich 0) {
   return null;
} else {
   // mach was anderes
}

Als kleiner Snippet:

Java:
	public static void main(String[] args) {
		int[] test = {1,2,3};
		System.out.println(test.length);
	}

Ausgabe ist hier 3.
 
Ich hätt gleich noch ein Problem gefunden bei ner anderen Aufgabe.
Befürchte das es nur eine Kleinigkeit ist aber ich finds gerade nicht.
Die Methode sumItems soll die Summe aller LIstenelemente ermitteln
(ListNode head):

Java:
public static int sumItems(ListNode head) {
		if(head == null){
			return 0;
		}
		int counter =0;
		for ( ListNode currentNode= head; currentNode != null; currentNode = currentNode.getSuccessor()){
			if(currentNode.getSuccessor()!=null){
				counter = counter+ currentNode.getContent();
			}
		}

		return counter;
	}
Wenn die Liste keine Elemente enthält funktionierts.
Aber bei einem oder 2 Objekten gehts schon nicht mehr
Findet jmd spontan meinen Fehler?
 
Da ist eher eine while-Schleife zu empfehlen.. Die macht so lange etwas, bis die Bedingung nicht mehr erfüllt ist.

Pseudocode:

Code:
int counter = 0;

ListNode aktuell = head;
while(aktuell.getSuccessor() != null) {
   counter +=1;
   aktuell = aktuell.getSuccessor();
}
 
Java:
if(currentNode.getSuccessor()!=null){
                counter = counter+ currentNode.getContent();
            }

Die Bedingung ist unsinnig. Ob dieses Element einen Nachfolger hat hat keine Auswirkungen, ob du auf den Content zugreifen kannst. Um zu überprüfen, ob es null ist, hast du ja die Bedingung im Kopf der Schleife.

Edit:
@mrbela
Ich sehe den Sinn daran nicht, warum du dem TO nun zur while-schleife raten willst.
Ich finde die Syntax der for-schleife da recht schön zu lesen und das Problem liegt bei ihm an einer anderen Stelle.
 
Zuletzt bearbeitet:

Zurück
Oben