ik ben bezig met het leren van c#. aangezien ik in c++ een mooie implementatie van een boom structuur had leek het me leuk die ook in c# te implementeren.
het idee is dat iedere node in de boom een arraylist heeft waar andere nodes in kunnen. dat lijkt goed te gaan. totdat ik een subnode wil aanspreken met een functie... dan krij ik elke keer de foutmelding : "de toepassing heeft een fout gegenereerd die niet kon worden verwerkt."
de afgelopen 2 dagen ben ik er al mee bezig, ik heb de volgende dingen geprobeerd:
- arraylist gewoon doorlopen
- arraylist doorlopen met een enumerator
- normale array ipv arraylist gebruiken
- normale array en die doorlopen met een enumerator
mijn laatste poging (waar ik hieronder de code van post) werkt dus met een fixed size array. dat is niet wat ik wil maar om uit te sluiten dat het met de arraylist te maken heeft heb ik dat maar gedaan.
op regel 68 gaat het dus mis. het algoritme zoals het er nu staat klopt geeen hol van btw, maar het probleem wat ik eerst uit de weg wil helpen is dat ik daar dus die t kan aanspreken zondaer dat de boel crasht. het maakt ook niet uit welke methode van t ik aanroep, hij crashed gewoon... wat doe ik fout?
het idee is dat iedere node in de boom een arraylist heeft waar andere nodes in kunnen. dat lijkt goed te gaan. totdat ik een subnode wil aanspreken met een functie... dan krij ik elke keer de foutmelding : "de toepassing heeft een fout gegenereerd die niet kon worden verwerkt."
de afgelopen 2 dagen ben ik er al mee bezig, ik heb de volgende dingen geprobeerd:
- arraylist gewoon doorlopen
- arraylist doorlopen met een enumerator
- normale array ipv arraylist gebruiken
- normale array en die doorlopen met een enumerator
mijn laatste poging (waar ik hieronder de code van post) werkt dus met een fixed size array. dat is niet wat ik wil maar om uit te sluiten dat het met de arraylist te maken heeft heb ik dat maar gedaan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| namespace Tree
{
public class Root
{
dLogWriteLn LogWriteLn = new dLogWriteLn(oLog.WriteLn);
private Node root;
private int id;
public int Id {
get {
return id;
}
}
public Root(int newid) {
id = newid;
root = new Node(newid);
}
public bool AddNode(int parent, int child) {
if (parent == id) {
root.AddNode(child);
return true;
}
return false;
}
//
public void Test() {
this.AddNode(0, 1);
this.AddNode(0, 2);
int test1 = root.FindNode(1);
LogWriteLn (4, "returned id:" + test1);
}
}
public class Node
{
dLogWriteLn LogWriteLn = new dLogWriteLn(oLog.WriteLn);
private int id;
public int Id {
get {
return id;
}
}
private Node[] children = new Node[16];
private int childrenCount = 0;
public int ChildrenCount {
get {
return childrenCount;
}
}
public Node(int newid) {
id = newid;
LogWriteLn (4, "Created node: " + id);
}
public int FindNode(int find) {
if (this.id == find) {
return this.id;
}
if (childrenCount > 0) {
IEnumerator Test = children.GetEnumerator();
while (Test.MoveNext()) {
Node t = (Node) Test.Current;
LogWriteLn (4, "" + t.ToString());
}
}
return -1;
}
public bool AddNode(int child) {
childrenCount++;
children[childrenCount] = new Node(child);
return true;
}
}
} |
op regel 68 gaat het dus mis. het algoritme zoals het er nu staat klopt geeen hol van btw, maar het probleem wat ik eerst uit de weg wil helpen is dat ik daar dus die t kan aanspreken zondaer dat de boel crasht. het maakt ook niet uit welke methode van t ik aanroep, hij crashed gewoon... wat doe ik fout?