# Objekte addieren



## merv (17. Dez 2017)

Hallo,
eine Frage wie kann man zwei Objekte addieren bzw. subtrahieren ?
z.B hier :

```
public Node getChildNode(Node node, Move move) {
        Integer[] new_state = new Integer[2];

        new_state[0] = (Integer) node.state[0];
        new_state[1] = (Integer) node.state[1];

        if (move != null) {
            if (move.to == "x") {
                new_state[0] = node.state[0]+ move.quantity;
            }
            if (move.to == "y") {
                new_state[1] = node.state[1] + move.quantity;
            }
            if (move.from == "x") {
                new_state[0] = node.state[0] - move.quantity;
            }
            if (move.from == "y") {
                new_state[1] = node.state[1] - move.quantity;
            }
        }
        Node new_node = new Node(new_state, move, node);
        return new_node;
    }
```
?
 node.state und move.quantity sind vom Typ Object. 

Danke !


----------



## mrBrown (17. Dez 2017)

Gar nicht.

Addieren kannst du so nur Zahlen.
Entweder sind das also Zahlen, dann müssest du vorher passend casten (was du mit `node.state[0]` auch machst) - oder es geht nicht.


----------



## Thallius (17. Dez 2017)

Der Code ist auch Mumpitz. Eine Node ist niemals eine Zahl. Sie kann ein Attribut Zahl haben, aber dann wäre es schon keine reine Node mehr sondern bereits ein Object das von der Klasse Node ableitet. Eine Node hat nichts anderes zu beinhalten als die für eine Liste notwendigen Verknüpfungen. Deshalb heist sie Node.


----------



## mrBrown (17. Dez 2017)

Thallius hat gesagt.:


> Der Code ist auch Mumpitz. Eine Node ist niemals eine Zahl. Sie kann ein Attribut Zahl haben, aber dann wäre es schon keine reine Node mehr sondern bereits ein Object das von der Klasse Node ableitet. Eine Node hat nichts anderes zu beinhalten als die für eine Liste notwendigen Verknüpfungen. Deshalb heist sie Node.



Das ist auch Mumpitz.


----------



## JCODA (17. Dez 2017)

Kann es sein, dass Move vielleicht generisch ist, d.h. vielleicht sollte da so etwas wie Move<Integer> stehen o.Ä. ?


----------



## Thallius (17. Dez 2017)

mrBrown hat gesagt.:


> Das ist auch Mumpitz.



Da habe ich nur drauf gewartet das das kommt.... Wie immer hast du natürlich recht und ich bin raus. Wie aus jedem Thread wo Du deinen Senf abläßt....


----------



## mrBrown (17. Dez 2017)

Thallius hat gesagt.:


> Wie immer hast du natürlich recht


Wäre irgendwie ziemlich unnötig, sich selbst als im Unrecht zu sehe, und trotzdem zu posten...


Thallius hat gesagt.:


> und ich bin raus


...wie immer, wenn man nicht mit deiner Meinung konform geht. Ich begründe meine immerhin: 



Thallius hat gesagt.:


> Eine Node ist niemals eine Zahl


Wird auch nicht so benutzt.


Thallius hat gesagt.:


> Sie kann ein Attribut Zahl haben


So wie in obigem Code.


Thallius hat gesagt.:


> aber dann wäre es schon keine reine Node mehr


Wer definiert eigentlich, was ein "Node" darf und was nicht?


Thallius hat gesagt.:


> sondern bereits ein Object das von der Klasse Node ableitet.


Meinst du eine Instanz der Klasse Node der eine Instanz einer Subklasse von Node?


Thallius hat gesagt.:


> Eine Node hat nichts anderes zu beinhalten als die für eine Liste notwendigen Verknüpfungen.


Genau, so wie der Node in einem Baum nur eine Liste darstellt oder Nodes in XML nur Listenverknüpfungen sind...



Thallius hat gesagt.:


> Deshalb heist sie Node


Das ist ein so generischer Name, dass er absolut nichts über den Kontext aussagt.
Außer vielleicht, das sie irgendwie verknüpft und Teile eines große ganzen sind.

Aber vielleicht ist Node.js auch nur eine Liste ¯\_(ツ)_/¯


(Abgesehen davon entspricht der Node oben zum Großteil deiner "Definition": Er enthält die Verknüpfung und den generischen Inhalt (State und Move). Oder darf ein Node keinen Inhalt haben? (Dann wärs aber ziemlich nutzlos...))


----------



## merv (17. Dez 2017)

```
public class Node {

    //public int[] state;
    public Object [] state;

    public Node parent;

    public Move move;

    public Node(Object [] initial_state, Move move, Node parent) {
        this.state =  initial_state;
        this.move = move;
        this.parent = parent;
    }
}
```

ich wollt state nicht als int array speichern und sozusagen 'genereller' machen. Sorry ich bin erst ein Anfänger in Java ...


----------



## mrBrown (17. Dez 2017)

Dafür kannst du Generics nutzen, die sind aber ein Thema für sich...


----------



## Javinner (17. Dez 2017)

@merv 
Ich sehe da ein mögliches Problem, denn dein Konstruktor führt in der Parameterliste ein Array von Typ Objekt, welches aber mit einem int initialisiert wird. Das heißt, du musst hier die Augen offen halten, den ein Array von Typ Objekt nun mal alles sein kann. @mrBrown  hat es bereits erwähnt: Generics ist die Lösung, aber kein einfaches Thema http://openbook.rheinwerk-verlag.de/javainsel/javainsel_09_001.html


----------



## merv (17. Dez 2017)

hmmmm.. Okey Danke an alle !


----------



## truesoul (18. Dez 2017)

mrBrown hat gesagt.:


> Aber vielleicht ist Node.js auch nur eine Liste ¯\_(ツ)_/¯


----------

