Problem mit generischen klassen und methoden

MonsyX

Grünschnabel
Hallo liebe comunity, ich hab ein kleines problem mit der generischen klasse und methode in java, undzwar kann ich nichtmehr wirklich auf die daten der objekte wirklich gescheit zugreiffen und verarbeiten, kann mir irgendjemand vieleicht ein tipp geben wie man das bewerkstelligne könnte, ich hab mal den quellcode von meiner klasse hier unten angehängt.

Danke für die hilfe im voraus.

geht mir auch vorallem um die methode add, das ich da die berechnungen durchführen kann ohne das es gleich fehler gibt, ich hab vieles probiert wie man sieht, aber ncihts funktioniert.

Gruß MonsyX

Code:
public class Complex<T> 
{
	protected T real; 
	protected T imag; 
	
	public Complex() 
	{ 
		this.real = null; 
		this.imag = null; 
	}

	public Complex(T real, T imag) 
	{ 
		this.real = real; 
		this.imag = imag; 
	}
	
	public void setreal(T real)
	{
	this.real = real;
	}
	
	public void add(Complex<Double> a, Complex<Double> b)
	{	
		if(a.real instanceof Double && b.real instanceof Double) 
		{
			//((Double)a.real).doubleValue() + ((Double)a.real).doubleValue()
			//Double.this.valueOf(c.real.getClass());
			//Double this.real =  ((Double)a.real).doubleValue() + ((Double)b.real.doubleValue();
			this.imag = ((Double)a.imag).doubleValue() + ((Double)a.imag).doubleValue());
				//new Double(a.real.doubleValue() + b.real.doubleValue());
			//} else {
				//throw new Exeption();
		}		
	}	
}
 
Zuletzt bearbeitet:
Anscheinend will er komplexe Zahlen addieren, egal ob es Integer-, Double- oder sonstige Werte sind.
In diesem Fall hat er jedoch nur eine Methode zur Addition zweier komplexer Zahlen als double-Werte implementiert.

Dennoch verstehe ich auch nicht genau wo das Problem liegt @MonsyX.
Sag doch mal was genau nicht geht (Exception?Falscher Wert?)
Oder ist dein Problem gar kein Java sondern ein Mathematikproblem?

Je genauer die Beschreibung um so eher gibt es eine schnelle/gute Antwort...

MfG Ben

(PS: Eine add-Funktion ohne Rückgabewert erscheint mir abseits von EventListenern etwas unsinnig, aber in deinem Fall müsstest du wohl ein Complexe<Double> zurückgeben...)
 
Zuletzt bearbeitet von einem Moderator:
@kaMii
Dass er Zahlen addieren möchte ist mir schon klar. Nur da er immer was anderes gemacht hat, möchte ich erstmal genau wissen, was er machen möchte, dann kann ich ihm auch helfen.

MFG

zEriX
 
Mal ne blöde Frage vorab ... warum ist die klasse denn überhaupt "generisch". Ich meine welche Datentyspen könnte T denn sonst noch annehmen (ausser double)?
 
Hallo, es funktioniert ja soweit alles ganz gut, ich übergebe an ein objekt der klasse complex, genauer gesagt an die methode add, 2 andere objekte der klasse complex, ist auch kein problem, und will nun die jeweiligen komponenten miteinander addieren, mal angemerkt, die beiden typen der komponenten sind generisch und die abjekte an sich auch.

das problem ist nun folgendes, ich bekomme auf teufel komm raus die jeweiligen komponenten nicht miteinander mathematisch miteinander verknüpft und die summe auf das attribute geschrieben, nichtmal mit abfragen der objekttypen und dem dann zum richtigen format casten der atribute geht das.

Also die addition an sich geht dann, aber ich kann das ergebniss nicht auf das attribute vom objekt zuweisen.

// möglicher anwendung
Complex<Double> a = new Complex<Double>(2,2);
Complex<Double> a = new Complex<Double>(2,2);
Complex<Double> c = new Complex<Double>();
c.add(a,b);

jetzt ist mir shcon klar das es mathemathisch alles noch nicth korrekt ist in meiner klasse, und das da sehrviel auskomentiert ist, aber wie gesagt hab ich da noch nciht wieter programmiert in dem sinne, weil ich die einzelnen attribute der beiden objekte a und b nicht zusammen addieren kann und auf das gewollte von c zuweisen.

hoffe habe jetzt besser beschreieben was ich eigentlich wollte und das mir jetzt jemand helfen kann.

und jetzt sagt bitte nicht ich soll das generische weglassen und es mit überladen konstruktoren machen und ins objekt für jeden möglichen variablentyp attribute anlegen, den das wollte ich ja gerade nicht, wollte einige allgemein gültige klasse halt schreiben. stellt euch nur mal vor ich will einen algortihmus umsetzen un dder soll alle zahlentypen bearbeiten könnten, wäre doch taktisch klüger wenn man das mit den generischen klassen und methoden machen könnte und nicht alles aus programmierne müsste.

MfG
MonsyX
 
Vielleicht steh ich ja gerade auf dem Schlauch, aber trotzdem nochmal die Frage ... warum Generisch?

Die real und imaginärteile von Complex werden ja wohl immer numerisch sein, oder? Macht es Sinn da einen String reinzustecken? Warum nicht einfach für double implementieren und fertig? Ich mein alle anderen numerischen Datentypen sollten sich doch problemlos in Double umwandeln lassen Ob da jetzt ein long oder ein Int oder ein Double reingesteckt wird ist doch im endeffekt egal.

Gr. H.
 
Das mit der Addition funktioniert schon, wenn man es richtig macht :-)

Java:
public class Complex<T> 
	{
		protected T real; 
		protected T imag; 
		
		public Complex() 
		{ 
			this.real = null; 
			this.imag = null; 
		}

		public Complex(T real, T imag) 
		{ 
			this.real = real; 
			this.imag = imag; 
		}
		
		public void setreal(T real)
		{
		this.real = real;
		}
		
		public void add(Complex<Double> a, Complex<Double> b)
		{	
			if(a.real instanceof Double && b.real instanceof Double) 
			{
				double erg;
				erg = a.imag.doubleValue() + a.imag.doubleValue();
			}		
		}	
	}

Du kannst du schon addieren, du musst halt das Ergebnis nur einer Variablen zuordnen. Du kannst es natürlich nicht einer generischen Variablen deine Klasse zuordnen, wenn du nicht sagst, von welcher Klasse diese sind.


und jetzt sagt bitte nicht ich soll das generische weglassen und es mit überladen konstruktoren machen und ins objekt für jeden möglichen variablentyp attribute anlegen, den das wollte ich ja gerade nicht, wollte einige allgemein gültige klasse halt schreiben. stellt euch nur mal vor ich will einen algortihmus umsetzen un dder soll alle zahlentypen bearbeiten könnten, wäre doch taktisch klüger wenn man das mit den generischen klassen und methoden machen könnte und nicht alles aus programmierne müsste.
So wie du das gemacht hast wird es aber nicht funktionieren, da du sie ja schon auf double ausgeprägt hast. Also wird diese Methode auch nur mit double funktionieren.

MFG

zEriX
 
Ok,

nochmal von anfang an, ich hab leider an der klasse mehrmals rumgespielt, hier eigentlich das was ich haben wollte!!

Code:
import java.lang.*;
public class Complex<T> 
{
	protected T real; 
	protected T imag; 
	
	public Complex() 
	{ 
		this.real = null; 
 		this.imag = null; 
	}

	public Complex(T real, T imag) 
	{ 
		this.real = real; 
		this.imag = imag; 
	}
	
	public void setreal(T real)
	{
	this.real = real;
	}
	
	public void add(Complex<T> a, Complex<T> b)
	{	
			this.imag = a.imag + b.imag; // <=== das soll funktionieren
                        this.real = a.real + b.real; // <=== und das
	}	
}

ich habs oben extra nochmal mit pfeilen nun markiert, auf einen bestimmten typ casten und dann auf eien variable diesen typs zuweisen geht, das ist aber nciht das was ich will, sondern ich will es den attributes des objektes zuweisen, welchen dann den gleichen typ beim initialisieren bekommt wie die zu addieren objete.
und mir ist schon klar das diese klasse mit string keinen sinn machen würde, ist halt eher allgemein im sinne von allen zahlen typen.

so, hoffe das jetzt alle unklarheiten aus dem weggeräumt sind
 
Das wird so aber nicht funktionieren, da T ja alles sein kann und man kann nicht jedes Object addieren.

MFG

zEriX
 
Zurück