Klassen Innere Klassen, verkettete Liste

atomvirus

Mitglied
Hallo zusammen!
Bin gerade dabei eine vergangenes Beispiel zu verarbeiten...
Nur ist mir das System mit den Inneren Klassen, also jetzt die Knoten und das Zusammenspiel nicht mehr klar... Will schlussendlich auf eine destruktive liste umstellen, nur fehlt mir der ansatz was ich dazu alles brauch, bzw. das System...

Java:
public class IntList {
	private class IntNode { // Innere Klasse für die Knoten

		int data; // Int - Variable zum speichern des Integers (Objekt)
		IntNode link; //

		IntNode() { // default Konstruktor
		}

		IntNode(int i, IntNode n) { // Konstruktor m. Parameterübergabe
		}
	}

	private IntNode start; // Instanzvariable start

	public IntList() { // Parameterloser Konstruktor
		start = null;
	}

	private IntList(IntNode n) { // nicht public?!
		start = n;
	}

	public IntList add(int i) {
		return new IntList(new IntNode(i, start));
	}

	public IntList tail() {
		return new IntList(start.link);
	}

	public int head() {
		return start.data;
	}

	public boolean notEmpty() {
		return start != null;
	}
}
 

Volvagia

Top Contributor
Was ist dir denn nicht klar? Sieht wie ein immutabler verketteter Stack aus, der nur ein Element enthalten können soll und mit sich selbst verkettet ist. ???:L Und was ist eine "destruktive liste"? Eine, die nicht das macht, was man von ihr verlangt? Google spuckt mir da garnichts aus.
 

atomvirus

Mitglied
ja eben, mir ist dieses Bsp. auch nicht mehr klar...
im endeffekt will i aus dieser Liste, oder halt selbst eine StringList erstellen... Aber eben nicht non-destruktiv, sprich das jedes mal wenn ein neuer Knoten dazu kommt eine neue liste erstellt wird, sondern das einfach ein knoten hintenangefügt wird, sprich destruktiv... Ist so ein typischen Beispiel für verkettete Listen u. innere Klassen, nur steh i da schon ein bisschen daneben ???:L
 

Volvagia

Top Contributor
Ach so, dann ist destruktiv wohl das selbe wie mutable. Kenne es nur als Gegenteil von konstruktiv.

Habs dir mal runtergetippt. Ist ungetestet, wie ich mich kenne mindestens 3 Bugs, eher 5. Könnten auch noch mehr sein. Ich denke aber nicht, dass dir das im Endeffekt sehr viel hilft, stell einfach deine Fragen. Die langweiligen Methoden, die man nicht so oft braucht habe ich ausgelassen.

Java:
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Liste<T> implements List<T>
{
	private int size;
	private Node first;
	
	public Liste()
	{
		super();
	}
	 
	public int size()
	{
		return(size);
	}
	public boolean isEmpty()
	{
		return(size == 0);
	}
	public void clear()
	{
		first = null;
		size = 0;
	}
		
	public boolean add(T e)
	{
		Node addNode = new Node(e);
		if(size == 0)
			first = addNode;
		else
		{
			Node nextNode = null;
			for(int i = 0; i < size - 1; i++)
			{
				if(nextNode == null)
					nextNode = first.getLink();
				else
					nextNode = nextNode.getLink();
			}
			nextNode.setLink(addNode);
		}
		size++;
		
		return(true);
	}
	public T remove(int index)
	{
		if(index > size - 1)
			throw new IndexOutOfBoundsException();
		
		Node nextNode = null;
		for(int i = 0; i < index - 1; i++)
		{
			if(nextNode == null)
				nextNode = first.getLink();
			else
				nextNode = nextNode.getLink();
		}
		
		Node thisNode = nextNode;
		nextNode = thisNode.getLink();
		Node theNodeAfterNext = nextNode.getLink();
		
		thisNode.setLink(theNodeAfterNext);
		size--;
		return(nextNode.getData());
	}
	public boolean contains(Object o)
	{
		Node nextNode = null;
		for(int i = 0; i < size - 1; i++)
		{
			if(nextNode == null)
				nextNode = first.getLink();
			else
				nextNode = nextNode.getLink();
			
			if(nextNode.getData().equals(o))
				return(true);
		}
		return(false);
	}
	public boolean remove(Object o)
	{
		Node nextNode = null;
		for(int i = 0; i < size - 1; i++)
		{
			if(nextNode == null)
				nextNode = first.getLink();
			else
				nextNode = nextNode.getLink();
			
			if(nextNode.getData().equals(o))
			{
				Node theNodeAfterNext = nextNode.getLink();
				if(theNodeAfterNext != null)
					nextNode.setLink(theNodeAfterNext.getLink());
				else
					nextNode.setLink(null);
				size--;
				return(true);
			}
		}
		return(false);
	}
	public boolean addAll(Collection<? extends T> c)
	{
		for(T data:c)
			add(data);
		return(false);
	}	
	public T get(int index)
	{
		if(index > size - 1)
			throw new IndexOutOfBoundsException();
		
		Node nextNode = null;
		for(int i = 0; i < index - 1; i++)
		{
			if(nextNode == null)
				nextNode = first.getLink();
			else
				nextNode = nextNode.getLink();
		}
		return(nextNode.getLink().getData());
	}
	public T set(int index, T element)
	{
		if(index > size - 1)
			throw new IndexOutOfBoundsException();
		
		Node nextNode = null;
		for(int i = 0; i < index - 1; i++)
		{
			if(nextNode == null)
				nextNode = first.getLink();
			else
				nextNode = nextNode.getLink();
		}
		nextNode = nextNode.getLink();
		T currentData = nextNode.getData();
		nextNode.setData(element);
		return(currentData);
	}

	public boolean removeAll(Collection<?> c)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public void add(int index, T element)
	{
		throw new UnsupportedOperationException("Method not supported");
	}	
	public boolean addAll(int index, Collection<? extends T> c)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public boolean containsAll(Collection<?> c)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public int indexOf(Object o)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public int lastIndexOf(Object o)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public boolean retainAll(Collection<?> c)
	{
		throw new UnsupportedOperationException("Coder hasnt understand.");
	}
	public ListIterator<T> listIterator()
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public ListIterator<T> listIterator(int index)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public Iterator<T> iterator()
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	public Object[] toArray()
	{
		throw new UnsupportedOperationException("Method not supported");
	}	
	public List<T> subList(int fromIndex, int toIndex)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	@SuppressWarnings("hiding")
	public <T> T[] toArray(T[] a)
	{
		throw new UnsupportedOperationException("Method not supported");
	}
	private class Node
	{
		private T data;
		private Node link;

		private Node(T d)
		{
			super();
			data = d;
		}
		public void setData(T d)
		{
			data = d;
		}
		public T getData()
		{
			return(data);
		}
		public Node getLink()
		{
			return(link);
		}
		public void setLink(Node l)
		{
			link = l;
		}
	}
}
 

atomvirus

Mitglied
danke für die Antwort, nur die haut mich total aus dem Konzept :D
...mittels wärs sicher auch einfacher, bzw. bequemer, nur sollte ichs schaffen ohne irgegendeinen import von java.utils :-/

________________________


public interface StringListIterator {
boolean hasNext(); // true gdw es git ein weiters Element
String getNext(); // liefert naechstes Element; requires hasNext()
}

public interface StringList {
void add(String s); // fuegt s vorn hinzu
void removeFirst(); // loescht erstes Element; requires nrOfElems > 0
int nrOfElems(); // Anzahl Elemente
StringListIterator giveIterator(); // liefert Iterator; Durchlauf vom ersten zum letzten Element
}

...sollte nur diese zwei Interfaces benutzen, und eben in der 1. Implementierung eine verzeigte Liste aus in einer inneren Klassen definierten Knoten. Als altes anschauungsbeispiel ist eben die IntList gedacht, nur eben mutable... find auf google auch jetzt nichts brauchbares...
 
Zuletzt bearbeitet:

atomvirus

Mitglied
So jetzt hab ichs mal ohne java.util. gemacht, funktioniert jetzt auch, habs schon getestet...

Nur brauch ich noch nen "Iterator" mit hasnext(); und getnext(); , nur für was, welchen Sinn hat der und was soll der ausgeben?


...hier mal mein code
Java:
public class Liste implements StringList { // Klasse für die Liste
	public class StringNode { // Unterklasse für die Knoten
		StringNode nach; // Referenz auf Nachfolger
		String wert; // das Objekt
	}

	public Liste() {
	}; // default Konstruktor

	StringNode erstes;

	public boolean istLeer() { // istLeer Methode
		return erstes == null;
	}

	public int nrOfElems() { // Gibt die Länge der Kette
		int i = 0;
		StringNode e = erstes;
		while (e != null) {
			e = e.nach;
			i++;
		}
		return i;
	}

	public void add(String j) {
		StringNode neu = new StringNode();
		neu.nach = erstes;
		neu.wert = j;
		erstes = neu;
	}

	public void removeFirst() {
		if (erstes == null) {
		} else {
			erstes = erstes.nach;
		}
	}

	public String ausgabe() {
		StringNode e = erstes;
		String s = "";
		while (e != null) {
			s += e.wert + " ";
			e = e.nach;
		}
		s += " ";
		return s;
	}

	@Override
	public StringListIterator giveIterator() {
		// TODO Auto-generated method stub
		return null;
	}
}
 

Volvagia

Top Contributor
Iterator kannst du keinen einbauen, weil das Interface dazu im Pakage java.util liegt.

btw.
[java=34]
if (erstes == null) {
}
[/code]

???:L

[java=40]
String s = "";
while (e != null) {
s += e.wert + " ";
e = e.nach;
}
s += " ";
[/code]

Gaaaaanz schlecht.
 

tuttle64

Bekanntes Mitglied
Nur brauch ich noch nen "Iterator" mit hasnext(); und getnext(); , nur für was, welchen Sinn hat der und was soll der ausgeben?

üblicherweise liefert hasNext() true zurück, wenn noch noch elemente vorhanden sind und getNext() holt das nächste element aus der collection und rückt den iterator zum nächsten element.

@volgagia: weil es ein interface ist muss es implementiert werden.
 
Zuletzt bearbeitet:

atomvirus

Mitglied
Danke für die Hilfe...hab das mit den Iterator mal in nen Versuch umgesetzt, nur hab i jetzt einen Fehler seit ich die add & removeFirst nochmals geändert habe und zwar bei der Inneren Klasse für den Iterator MyIterator bei der übergabe von current = start

Java:
	// Instanzvariable
	private StringNode start;
	private StringListIterator myStringListIterator;

	// Constructor
	public LinkedStringList() {
		start = null;
	}

	// hinzufügen
	public void add(String s) {
		StringNode neu = new StringNode();
		neu.link = start;
		neu.data = s;
		start = neu;
	}

	// loeschen
	public void removeFirst() {
		if (start == null) {
		} else {
			start = start.link;
		}
	}

	// gibt Iterator
	public StringListIterator giveIterator() {
		return new MyIterator();
	}

	// innere Klasse fuer Iterator
	private class MyIterator implements StringListIterator {
		StringNode current;

		MyIterator() {

			current = start;
		}

		public String getNext() { // requires hasNext
			String result = current.data;
			current = current.link;
			return result;
		}

		public boolean hasNext() {
			return current != null;
		}

	}
}

...hier noch ein Testprogramm

Java:
public class BspTest {

	public static void main(String[] args) {
		String str = "Test";
		LinkedStringList myLinkedStringList = new LinkedStringList(); // leere
																		// Liste

		for (int i = 0; i < 5; i++) {
			myLinkedStringList.add(str + i);
		}

		StringListIterator myStringListIterator = myLinkedStringList.giveIterator();

		if (myLinkedStringList.notEmpty()) {

			do {
				System.out.println(myStringListIterator.getNext());
			} while (myStringListIterator.hasNext());

		}

		System.out.println("Anzahl der Elemente:");
		System.out.println(myLinkedStringList.nrOfElems());

		System.out.println("------------");
		System.out.println("myLinkedStringList.removeFirst()");
		System.out.println("------------");
		myLinkedStringList.removeFirst();
		
		if (myLinkedStringList.notEmpty()) {

			do {
				System.out.println(myStringListIterator.getNext());
			} while (myStringListIterator.hasNext());

		}

		System.out.println("Anzahl der Elemente:");
		System.out.println(myLinkedStringList.nrOfElems());
		}
	}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erste Schritte Innere Klassen und Interfaces Java Basics - Anfänger-Themen 2
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
O Innere Klassen nutzen? Java Basics - Anfänger-Themen 4
J Klassen Innere Klassen Java Basics - Anfänger-Themen 5
S Innere Klassen in Java Java Basics - Anfänger-Themen 4
G innere Klassen Java Basics - Anfänger-Themen 2
berliner Klassen Vererbung und Zugriff auf innere private Variable Java Basics - Anfänger-Themen 22
M [Einfaches Beispiel] Problem mit innere Klassen Java Basics - Anfänger-Themen 4
P In innere Klassen Variablen übergeben Java Basics - Anfänger-Themen 10
M Warum können innere Klassen keine static-members haben? Java Basics - Anfänger-Themen 2
A innere Klassen Java Basics - Anfänger-Themen 6
G Innere klasssen unde "extends" klassen definieren, Java Basics - Anfänger-Themen 2
Detlef Bosau nichtstatische Innere Klasse, this Pointer. Java Basics - Anfänger-Themen 47
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
B Klassen Anonyme innere Klasse Java Basics - Anfänger-Themen 4
F Klassen Innere Klasse - Problem Java Basics - Anfänger-Themen 2
D Annonyme Innere Klasse: Listen mit geradem Index ausgeben Java Basics - Anfänger-Themen 6
T Klassen Innere Klasse Java Basics - Anfänger-Themen 3
H Threads Problem bei Thread + Innere Klasse Java Basics - Anfänger-Themen 3
D static, äußere/innere Klasse Java Basics - Anfänger-Themen 4
D Unterschied innere Klasse/ anonyme innere Klasse Java Basics - Anfänger-Themen 7
G Innere Klasse static oder nicht Java Basics - Anfänger-Themen 9
S Innere Klasse, Wertübergabe (String) Java Basics - Anfänger-Themen 7
N enum als innere Klasse Java Basics - Anfänger-Themen 7
P Methode übergibt Parameter an innere Methode Java Basics - Anfänger-Themen 2
T Zugriff auf innere Klasse von aussen Java Basics - Anfänger-Themen 2
J Innere Maße des Fensters Java Basics - Anfänger-Themen 3
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben