Methoden in Klassen...

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Methoden in Klassen…
Ich habe probiert folgende Code auszuführen:
public class Rational{
static int zaehler,nenner;

Rational (int z, int n){
	zaehler=z;
	nenner=n;
}
static Rational rationalAdd(Rational r){
	return new Rational (zaehler*r.nenner+nenner*r.zaehler, nenner*r.nenner);
}
public static void main (String[] arg){
	Rational a=new Rational(2,4);
	System.out.println(a.zaehler + "/" + a.nenner);
	Rational b=new Rational(1,4);
	System.out.println(b.zaehler + "/" + b.nenner);
	a=rationalAdd(b);
              System.out.println(a.zaehler + "/" + a.nenner);

}

}
Aber es kommt etwas Falsches raus.
Ich verstehe nicht, wie man in dem Fall zwei Brüche addiert bzw. wie ich rationalAdd richtig benutze.


static int zaehler,nenner; >> int zaehler,nenner;

static Rational rationalAdd(Rational r){ >> Rational rationalAdd(Rational r){

a=rationalAdd(b); >> a=a.rationalAdd(b);


Danke sehr! Jetzt funktioniert!

Aber warum?
WK, ich weiß warum es funktioniert - wei0t du es auch?
Das ich nämlich fast wichtiger als dass es funktionert.

Warum war static hier falsch?


genauuuu!


Ich will hier nicht arrogant klingen - aber man lernt es halt nur, wenn man unteranderem von selbst draufkommt.


Jep. Vor allem sagt einem ja der compiler „was“ falsch ist.
Sowas bräuchte ich bei den Mathe Übungsblättern als Hilfestellung…
(gut, Computeralgebrasysteme. aber man muss es ja nicht übertreiben und hilft ja auch nicht für alles…)


Ja, ich verstehe das auch! Als ich static von der Attributen weggenommen habe, wurden diese Attributen an der richtigen Stelle nämlich bei den Objekten benutzt!! Bei der Methode ist es genauso: die jetzt nicht statische Objekten können dann auf diese Methode zugreiffen!!! Oder?


Du kannst immer auf etwas Statisches zugreifen egal was “du” bist.
Aber auf etwas Nichtstatisches kannst nur von etwas Nichtstatischem zugreifen.


Alles klar :wink:

Typumwandelung…
Jetzt aber ein anderes Problemchen:

class Zeiger{
int jim;

public static void main(String[] arg){
	Referenz d=new Referenz();
	if (d instanceof Verweis){
		Verweis m=(Verweis)d;
		m.buchstabe='2';
	}		
	else if (d instanceof Referenz){
		Referenz n=(Referenz)d;
		n.st="Note=";
	}

	if (d instanceof Verweis)
		System.out.println(m.buchstabe);
	else if (d instanceof Referenz)	
		System.out.println(n.st);
	}

}
class Verweis extends Zeiger{
char buchstabe;
Verweis (){
}
}
class Referenz extends Zeiger{
String st;
Referenz (){
}
}

Ich möchte nun Typumwandelung machen. Aber klappt nicht!


up!


du solltest vieleicht schreiben wo das problem liegt…


OK, ausführlicher: compiler sagt, dass variable d inconvertible Typ is’!
Aber in der Vorlesung hat man uns das Änliches gezeigt!


keine ahnung, aber zumindest das hier ist falsch:

   if (d instanceof Verweis)
        System.out.println(m.buchstabe);
    else if (d instanceof Referenz)   
        System.out.println(n.st);

n und m sind hier nicht definiert.


Ja, aber hier:
if (d instanceof Verweis){
Verweis m=(Verweis)d;
m.buchstabe=‘2’;
}
else if (d instanceof Referenz){
Referenz n=(Referenz)d;
n.st=“Note=”;
}
definiere ich doch m und n! Oder ist das keine Definition für m und n?


Deklariere die beiden Variablen nicht innerhalb der [m]if[/m]-Verzweigung, sondern ganz oben in der Funktion.


Jetzt sagt compiler dass m und n überrall deklariert sind…

Attachment:
Zeiger.java: https://fsi.cs.fau.de/unb-attachments/post_28911/Zeiger.java


Nicht [m]Verweis m=(Verweis)d;[/m], sodern [m]m=(Verweis)d;[/m]! Das Gleiche analog mit n.