Aus 2 mach 1

huhu
ich habe ein prob warscheinlich eins der einfachern natur bin aber leider zu dumm die lösung zu finden

ich habe vor aus 2 objekten 1 zu machen

hier erst mal die Main


public class MainTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Monster test1 =new Monster();
		Monster test2 =new Monster();
		
		System.out.println("test1 hat wert "+test1.getWissen()+" wissen");
		System.out.println("test2 hat wert "+test2.getWissen()+" wissen");
		Monster test3 = new Monster(test1,test2);
		System.out.println("test1 hat wert "+test1.getWissen()+" wissen");
		System.out.println("test2 hat wert "+test2.getWissen()+" wissen");
		System.out.println("test3 hat wert "+test3.getWissen()+" wissen");

	}

}```


dann hier die monsterklasse

```package Monster;

import java.util.Random;

public class Monster {
	
	private double wissen=10;
	private double kraft=10;
	private double beweglichkeit=10;
	private double aussehen=10;
	private double fertigkeiten=10;
	private double handwerk=10;
	private double befehle=10;
	private double schaden=10;
	private double leben=10;
	private double xp=0;
	private double level=0;
public Monster(){
	
}
public Monster(double wis,double kra,double bew,double aus,double fer,double han,double bef,double sch,double leb){
	wissen=wis;
	kraft=kra;
	beweglichkeit=bew;
	aussehen=aus;
	fertigkeiten=fer;
	handwerk=han;
	befehle=bef;
	schaden=sch;
	leben=leb;
	
}
	
public void levelUp (){
	
	wissen=+wissen+10*100*Math.random();
	kraft=kraft+10*100*Math.random();
	beweglichkeit=beweglichkeit+10*100*Math.random();
	aussehen=aussehen+10*100*Math.random();
	fertigkeiten=fertigkeiten+10*100*Math.random();
	handwerk=handwerk+10*100*Math.random();
	befehle=befehle+10*100*Math.random();
	schaden=schaden+10*100*Math.random();
	leben=leben+10*100*Math.random();
}

public Monster(Monster monster1,Monster monster2){
	double monster1werte;
	double monster2werte;
	Monster monster3;
	
	monster1werte = monster1.getWissen()+monster1.getKraft()+monster1.getBeweglichkeit()+monster1.getAussehen()+monster1.getFertigkeiten()+monster1.getHandwerk()+monster1.getBefehle()+monster1.getSchaden()+monster1.getLeben();
	monster2werte = monster2.getWissen() +monster2.getKraft() +monster2.getBeweglichkeit() +monster2.getAussehen() +monster2.getFertigkeiten() +monster2.getHandwerk() +monster2.getBefehle() +monster2.getSchaden() +monster2.getLeben();
	if (monster1werte<=monster2werte){
		//Monster1 werte verteilung
		monster1.setWissen(monster1.getWissen());
		monster1.setKraft(monster1.getKraft());
		monster1.setBeweglichkeit(monster1.getBeweglichkeit());
		monster1.setAussehen(monster1.getAussehen());
		monster1.setFertigkeiten(monster1.getFertigkeiten());
		monster1.setHandwerk(monster1.getHandwerk());
		monster1.setBefehle(monster1.getBefehle());
		monster1.setSchaden(monster1.getSchaden());
		monster1.setLeben(monster1.getLeben());
		//monster2 werte verteilung
		monster2.setWissen(monster2.getWissen()*2);
		monster2.setKraft(monster2.getKraft()*2);
		monster2.setBeweglichkeit(monster2.getBeweglichkeit()*2);
		monster2.setAussehen(monster2.getAussehen()*2);
		monster2.setFertigkeiten(monster2.getFertigkeiten()*2);
		monster2.setHandwerk(monster2.getHandwerk()*2);
		monster2.setBefehle(monster2.getBefehle()*2);
		monster2.setSchaden(monster2.getSchaden()*2);
		monster2.setLeben(monster2.getLeben()*2);
		//fusion
		 double if_wissen=monster1.getWissen()+monster2.getWissen();
		 double if_kraft=monster1.getKraft()+monster2.getKraft();
		 double if_beweglichkeit=monster1.getBeweglichkeit()+monster2.getBeweglichkeit();
		 double if_aussehen=monster1.getAussehen()+monster2.getAussehen();
		 double if_fertigkeiten=monster1.getFertigkeiten()+monster2.getFertigkeiten();
		 double if_handwerk=monster1.getHandwerk()+monster2.getHandwerk();
		 double if_befehle=monster1.getBefehle()+monster2.getBefehle();
		 double if_schaden=monster1.getSchaden()+monster2.getSchaden();
		 double if_leben=monster1.getLeben()+monster2.getLeben();
		 monster3 = new Monster(if_wissen, if_kraft, if_beweglichkeit, if_aussehen, if_fertigkeiten, if_handwerk, if_befehle, if_schaden, if_leben);
		 
	}
	else {
		//monster2 werte verteilung
		monster2.setWissen(monster2.getWissen());
		monster2.setKraft(monster2.getKraft());
		monster2.setBeweglichkeit(monster2.getBeweglichkeit());
		monster2.setAussehen(monster2.getAussehen());
		monster2.setFertigkeiten(monster2.getFertigkeiten());
		monster2.setHandwerk(monster2.getHandwerk());
		monster2.setBefehle(monster2.getBefehle());
		monster2.setSchaden(monster2.getSchaden());
		monster2.setLeben(monster2.getLeben());
		//monster1 werte verteilung
		monster1.setWissen(monster1.getWissen()*2);
		monster1.setKraft(monster1.getKraft()*2);
		monster1.setBeweglichkeit(monster1.getBeweglichkeit()*2);
		monster1.setAussehen(monster1.getAussehen()*2);
		monster1.setFertigkeiten(monster1.getFertigkeiten()*2);
		monster1.setHandwerk(monster1.getHandwerk()*2);
		monster1.setBefehle(monster1.getBefehle()*2);
		monster1.setSchaden(monster1.getSchaden()*2);
		monster1.setLeben(monster1.getLeben()*2);
		//fusion
		 double if_wissen=monster2.getWissen()+monster1.getWissen();
		 double if_kraft=monster2.getKraft()+monster1.getKraft();
		 double if_beweglichkeit=monster2.getBeweglichkeit()+monster1.getBeweglichkeit();
		 double if_aussehen=monster2.getAussehen()+monster1.getAussehen();
		 double if_fertigkeiten=monster2.getFertigkeiten()+monster1.getFertigkeiten();
		 double if_handwerk=monster2.getHandwerk()+monster1.getHandwerk();
		 double if_befehle=monster2.getBefehle()+monster1.getBefehle();
		 double if_schaden=monster2.getSchaden()+monster1.getSchaden();
		 double if_leben=monster2.getLeben()+monster1.getLeben();
		 monster3 = new Monster(if_wissen, if_kraft, if_beweglichkeit, if_aussehen, if_fertigkeiten, if_handwerk, if_befehle, if_schaden, if_leben);
	}
	 double wissen=monster3.wissen;
	 double kraft=monster3.kraft;
	 double beweglichkeit=monster3.beweglichkeit;
	 double aussehen=monster3.aussehen;
	 double fertigkeiten=monster3.fertigkeiten;
	 double handwerk=monster3.handwerk;
	 double befehle=monster3.befehle;
	 double schaden=monster3.schaden;
	 double leben=monster3.leben;
	 double xp=0;
	 double level=0;
}
	



public double getWissen() {
	return wissen;
}

public void setWissen(double wissen) {
	this.wissen = wissen;
}

public double getKraft() {
	return kraft;
}

public void setKraft(double kraft) {
	this.kraft = kraft;
}

public double getBeweglichkeit() {
	return beweglichkeit;
}

public void setBeweglichkeit(double beweglichkeit) {
	this.beweglichkeit = beweglichkeit;
}

public double getAussehen() {
	return aussehen;
}

public void setAussehen(double aussehen) {
	this.aussehen = aussehen;
}

public double getFertigkeiten() {
	return fertigkeiten;
}

public void setFertigkeiten(double fertigkeiten) {
	this.fertigkeiten = fertigkeiten;
}

public double getHandwerk() {
	return handwerk;
}

public void setHandwerk(double handwerk) {
	this.handwerk = handwerk;
}

public double getBefehle() {
	return befehle;
}

public void setBefehle(double befehle) {
	this.befehle = befehle;
}

public double getSchaden() {
	return schaden;
}

public void setSchaden(double schaden) {
	this.schaden = schaden;
}

public double getLeben() {
	return leben;
}

public void setLeben(double leben) {
	this.leben = leben;
}
}```

die console sag immer
```test1 hat wert 10.0 wissen
test2 hat wert 10.0 wissen
test1 hat wert 10.0 wissen
test2 hat wert 20.0 wissen
test3 hat wert 10.0 wissen```

solte aber bei test3 30 anzeigen

Wo ist die Frage? :slight_smile:

€: STatt

//sollte überflüssig sein
monster3 = new Monster(if_wissen, if_kraft, if_beweglichkeit, if_aussehen, if_fertigkeiten, if_handwerk, if_befehle, if_schaden, if_leben); 

//sollte gehen
this(if_wissen, if_kraft, if_beweglichkeit, if_aussehen, if_fertigkeiten, if_handwerk, if_befehle, if_schaden, if_leben);```

sorry, aber was du da vorhast wird so nichts.

Du kannst so aus 2 Objekten nicht eins machen.
Das neue hätte dann ja 2 werte für jede Variable, wie soll da entscheiden werden welche die richtige ist?

Und überhaupt: Was soll das bringen?
Willst du etwa die Werte zusammenrechenen?

edit: uups was überlesen

edit2: sowas monster1.setWissen(monster1.getWissen()); kannst du weglassen denn es tut… nichts:eek:
Du brauchst dem Monster1 die Werte von Monster1 nicht übergeben denn die hat es ja schon.

Immer wieder der Tipp: erstmal alles auf das notwendigste kürzen und testen und dann nach und nach erweitern und weiter testen. So ist das zuviel Chaos. Versuch es doch erstmal nur mit der einen Variable wissen und lass die anderen erst mal weg. Dann wirst du schnell feststellen, dass du die Variablen einmal für die Klasse und später noch einmal im Konstruktor deklariert hast und somit beim Zugreifen wohl die falsche davon erwischst.

Die Problematik besteht darin, dass Du im problematischen Konstruktor nicht die Instanzvariablen nutzt, sondern neue lokale Variablen definierst und diesen die Werte zuweist.

Der Code ist an vielen Stellen mehr als fragwürdig. “Überflüssiger” und “redundanter” Code wurde ja bereits erwähnt. Aber warum um Himmels willen erzeugst Du im Konstruktor eine weitere Monster Instanz (monster3) nur um deren Werte auszulesen und die Instanz anschließend zu verwerfen. Warum nicht direkt die Werte der eigentlichen Instanz (this) setzen?

Um das für dich anhand einer Variable nochmal durchzugehen:

Du hast:
[ul]
[li]Monster1 wissen = 10
[/li][li]Monster2 wissen = 10
[/li][/ul]
Du rufst Monster test3 = new Monster(test1,test2); auf.
if(monster1werte <= monster2werte) stimmt da beide gleich stark sind.
monster1.setWissen(monster1.getWissen());wie oben gesagt, überflüssig
monster2.setWissen(monster2.getWissen() * 2); verdoppelt das wissen von Monster2
[ul]
[li]Monster1 wissen = 10
[/li][li]Monster2 wissen = 20
[/li][/ul]
double if_wissen = monster1.getWissen() + monster2.getWissen();ist ok
monster3 = new Monster(if_wissen, if_kraft, if_beweglichkeit, if_aussehen, if_fertigkeiten, if_handwerk, if_befehle, if_schaden, if_leben);sollte zu
this(if_wissen, if_kraft, if_beweglichkeit, if_aussehen, if_fertigkeiten, if_handwerk, if_befehle, if_schaden, if_leben); werden.
[ul]
[li]Monster3 wissen = 30
[/li][/ul]
Das jetzt noch auf den Rest anwenden und es sollte besser sein.

Edit: da warn schon wieder n paar schneller als ich hier beim tippen :stuck_out_tongue: