[Java] incompatible types

chris_sit

Erfahrenes Mitglied
Hi Leute,


ich quäl mich nuun ne ganze Weile an einer von unserem Prof gestellten ausgabe (haben vor 3 wochen mit java angefangen)..


wir sollen eine klasse Rational schreiben, die diverse funktionen liefert.. addieren/zahler&nenner ausgeben.. usw..

einige funktionen werden mit
Code:
long zaehler()
deklariert, bei 2 hingegen steht statt dem "normalen" datentyp
Code:
Rational betrag()
, also die klasse selbst..

beim compilieren bekomm ich nun folgende fehlermeldung :

Rational.java:94: incompatible typ
found : long
required: Rational

hier die funktion betrag()

Code:
public Rational betrag()
	{
		if (zaehler < 0)
			{ zaehler = -zaehler; }
		else {}
		return zaehler;
	}



um nen hinweis woran es liegen könnte wäre ich dankbar, die NG zu unserer vorlesung ist die tage recht schweigsam, deswegen versuch ich bei euch mein glück, thx & frohes neues jahr


chris
 

Christian Fein

Erfahrenes Mitglied
Nun der in der Deklaration der Methode angebene Datentyp ist auch immer der den die Methode zurückgibt.


Dein Fehler ist:

Code:
public Rational betrag()
{
	if (zaehler < 0)
	{ zaehler = -zaehler; }
	else {}
	return zaehler;
}

zahler ist vom Datentyp long. Die Methode (Funktionen gibts bei Java nicht) betrag() deklariert Rational als Rückgabewert du aber gibst long (zaehler) zurueck.

also es kommt jetzt drauf an was du zurück geben willst.
Ist es wirklich nur der Wert von zaehler dann ist die mehthode so richtig:

public long betrag()
{
....

willst du aber eine Instanz dieser klasse zurückgeben (wovon ich jetzt mal weniger ausehe) dann sieht das so aus

public Rational betrag() {
return this;
}

Weil this (also das Object selber) vom Datentyp Rational ist.
 

chris_sit

Erfahrenes Mitglied
DAU@work

danke, das wars :)

mit der instanz hat's geklappt.. return new Rational(...

perfekt :)


[edit]
nur wie mach ich das bei boolean werten?!

mein rückgabewert
Code:
 return true
, in einer if-anweisung eingebettet, führt zum gleichen konflikt zwischen long(zaehler) und dem benötigten boolean..

Code:
found   : long
required: boolean
                if (this.zaehler = parameter.zaehler)
                   {return true; }

== & = sollte man zu unterscheiden wissen.. *peinlich*
 
Zuletzt bearbeitet: