Automat programmieren

TimoN11

Mitglied
Hey,
Dieser Automat soll programmiert werden:
1612702806421.png

Nun zu meiner Frage:
Ich habe für ein Knoten eine Klasse Node erstellt, darin sind die Instanzvariablen Node up & Node down. Up und Down sollen jeweils auf den nächsten Knoten referenziert sein. Wie kann man das anstellen bzw. kann mir jemand einen Denkanstoß geben?

Grüße,
 
Nur rein die Knoten willst Du abbilden?
Dann kannst Du einfach hin gehen und die Knoten wie beschrieben implementieren, d.h. Du hast etwas wie

Java:
public class Node {
    Node up;
    Node down;
    String value;
    // Getter / Setter
}

Und dann kannst Du erst einmal die Nodes alle erzeugen. Dazu irgendwelche Variablennamen überlegen (also z.B. node1, node2, node3, ...)
Dann kannst Du erst die Nodes alle erzeugen und dann up/down setzen also z.b. node1.setUp(node2); und so.

Dann hättest Du die Abbildung abgebildet.
 
Danke für deine Hilfe!
Wie kann ich das am besten machen?
Da man ja für die Deklaration die Up und Down benötigt, und um die zu erstellen braucht man wiederum die Down/Up Nodes
Müsste ja z.B. für Startknoten -> Node Knoten0 = new Node(value, up, down) sein.
Wenn ich dann z.B.

Java:
     Node Knoten0 = new Node(0, Knoten21,Knoten11);
    Node Knoten11 = new Node(0,Knoten21,Knoten12);
    Node Knoten12 = new Node(0,Knoten21,Knoten13);
    Node Knoten13 = new Node(0,Knoten14,Knoten13);
    Node Knoten14 = new Node(1,Knoten22,Knoten11);
    Node Knoten21 = new Node(0,Knoten22,Knoten11);
    Node Knoten22 = new Node(0,Knoten23,Knoten11);
    Node Knoten23 = new Node(0,Knoten23,Knoten24);
    Node Knoten24 = new Node(2,Knoten21,Knoten12);

Das geht ja nicht weil die Up/Down Nodes nicht erstellt wurden.
 
Du kannst die Knoten nicht immer im Konstruktor angeben. Beim ersten Knoten hast Du die folgenden ja noch nicht. Also beim Konstruktor entweder erst null mitgeben oder eben einen Konstruktor anbieten ohne die Parameter (bevorzugter Weg).

Und dann mittels Setter die Knoten in up und down setzen, so wie ich es angedeutet hatte im Text:
node1.setUp(node2);
 
Mal ein alternative Vorschlag (Skizze):

Java:
class Edge {
    public final String label;
    public final Node target;

    public Edge(String label, Node target) {
        this.label = label;
        this.target = target;
    }
}

class Node {
    public final String label;
    private List<Edge> edges = new ArrayList<>();

    public Node(String label) { this.label = label; }

    public void add(Edge edge) {
        edges.add(edge);
    }
}

Java:
private Node[] createNodes(String ... nodeLabels) {
    Node[] nodes = new Node[nodeLabels.length];
    for (int i = 0; i < nodeLabels.length; i++) {
        nodes[i] = new Node(nodeLabels[i]);
    }
    return nodes;
}


Node[] nodes = createNodes("start",
        "none", "none", "none", "buy",
        "none", "none", "none", "sell");

nodes[0].add(new Edge("down", nodes[1]));
nodes[0].add(new Edge("up", nodes[5]));
...
 

Zurück
Oben