Bäume in Java. Code funktioniert nicht

  • Themenstarter Themenstarter Christian1986
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Christian1986

Gast
Hallo, dieser Code sollte eigentlich fehlerfrei sein. Wenn ich ihn in Ecplipse einfüge, bekomme ich jedoch die folgende Fehler:


Exception in thread "main" java.lang.Error: Unresolved compilation problems:
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
ZahlNode cannot be resolved to a type
t.root cannot be resolved or is not a field

at main.main(main.java:9)



Was mache ich falsch?

Danke!




Code:
public class BinTree
{
	public ZahlNode root; // der Wurzelknoten
	public BinTree() { root = null; /* leerer Baum */ }
	public boolean contains(int z) { return contains(root, z); }
	protected boolean contains(ZahlNode node, int z) {
		if (node == null) return false;
		if (node.z == z) return true;
		return contains(node.left, z) 
		    || contains(node.right, z);
	}
	public void preorder() { 
		preorder(root); 
		System.out.println();
	}
	public void preorder(ZahlNode node) {
		if (node == null) return ;
		do_something(node.z);
		preorder(node.left);
		preorder(node.right);
	}
	public void inorder() { 
		inorder(root); 
		System.out.println();
	}
	public void inorder(ZahlNode node) {
		if (node == null) return ;
		inorder(node.left);
		do_something(node.z);
		inorder(node.right);
	}
	public void postorder() { 
		postorder(root); 
		System.out.println();
	}
	public void postorder(ZahlNode node) {
		if (node == null) return ;
		postorder(node.left);
		postorder(node.right);
		do_something(node.z);
	}
//	public void bfs() {
//		ConsList L = new ConsList();
//		L.append(root); // Beginne bei Wurzelknoten
//		while (!L.isEmpty()) {// Solange es noch zu besuchende Knoten gibt..
//			Node node = (Node)L.removeHead();
//			do_something(node.obj); 		// besuche naechsten Knoten ..
//			if (node.left != null) 	// und markiere seinen ..
//				L.append(node.left); // linken Kindknoten ..
//			if (node.right != null) 	// und seinen ..
//				L.append(node.right);	// rechten Kindknoten 
//		}
//	}
	
	
	
	public void do_something(int z) {
		System.out.print(z + " ");
	}

	public int getNumNodes() {
		return getNumNodes(root);
	}
	protected int getNumNodes(ZahlNode node) {
		if (node == null) return 0;
		return 1 + getNumNodes(node.left) + getNumNodes(node.right);
	}

	public int getHeight() {
		return getHeight(root);
	}
	protected int getHeight(ZahlNode node) {
		if (node == null) return 0;
		if (node.left == null && node.right == null) return 0;
		return 1 + Math.max(getHeight(node.left), getHeight(node.right));
	}

	public static void main (String ... args) {
		BinTree t = new BinTree();
		ZahlNode n1 = new ZahlNode(1);
		ZahlNode n2 = new ZahlNode(2);
		ZahlNode n3 = new ZahlNode(3);
		ZahlNode n4 = new ZahlNode(4);
		ZahlNode n5 = new ZahlNode(5);
		ZahlNode n6 = new ZahlNode(6);
		ZahlNode n7 = new ZahlNode(7);
		t.root = n1;
		n1.left = n2;
		n1.right = n3;
		n2.left = n4;
		n2.right = n5;
		n3.left = n6;
		n3.right = n7;
	}
}
 
Danke für deine Antwort.

Du meinst Klasse BinTree?
Wenn ich die einfüge und den eigentlichen Code in der Main Klasse ausführe, kommt genau das gleiche Problem
 
ich verstehe nicht ganz, warum die Klasse ZahNode heißen soll.
BiNTree ist doch der Name der Klasse?
 
du legst hier

Code:
  public ZahlNode root; // der Wurzelknoten

deinen Wurzelknoten an, der Typ ZahlNode ist aber nirgendwo vorhanden. Aus den Fingern ziehen kann sich der Kompiler das auch nicht.
 
ich versteh das leider nicht. Warum muss ich die Klasse anlegen, was muss da drin stehen? die Klasse heißt doch "binTree" ?!
 
Syntax:

Code:
ZahlNode root
(Typ)  (Variablenname)
Wenn du keinen Typ (Klasse) ZahlNode hast, kannst du auch keine Variable vom Typ ZahlNode deklarieren.
 
Was hast du den gedacht als du die Zeile geschrieben hast? Was soll ZahlNode machen/darstellen?

dürfte ungefähr so aussehen:

Code:
class ZahlNode {
	private int z;
	private ZahlNode left;
	private ZahlNode right;
	
	public ZahlNode(int i) {
		z = i;
	}

	public int getZ() {
		return z;
	}

	public void setZ(int z) {
		this.z = z;
	}

	public ZahlNode getLeft() {
		return left;
	}

	public void setLeft(ZahlNode left) {
		this.left = left;
	}

	public ZahlNode getRight() {
		return right;
	}

	public void setRight(ZahlNode right) {
		this.right = right;
	}
}
 
Joker,

ich versuche das nur einzubinden un dann damit etwas zu arbeiten. Geschrieben habe ich das nicht selbst.

Code:
public class ZahlNode {
	// das Objekt, welches dem Knoten zugeordnet ist
	public int z; 
	// die beiden Kindknoten
	public ZahlNode left;
    public ZahlNode right;
	public ZahlNode(int z) {
		this.z = z;
		left = right = null;
	}
}

so sieht sie aus 😉

Aber Respekt, dass du das mal eben so aus dem Stehgreif machst 😉
 
Christian1986 hat gesagt.:
Aber Respekt, dass du das mal eben so aus dem Stehgreif machst 😉
Code:
   private int z;
   private ZahlNode left;
   private ZahlNode right;
Diese 3 Zeilen schreibt man, den Rest erzeugt die IDE automatisch :wink:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben