Forum: PC-Programmierung Brauche Hilfe beim Verstehen dieses Quelltextes


von Relchen (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine Frage bezüglich dieses Quelltexts. Es geht darum den 
Realteil und den Imaginärteil von komplexen Zahlen zu addieren.

    public class Komplex {
    public double re, im;
    public Komplex addieren(Komplex k) {
    Komplex ergebnis = new Komplex(); ergebnis.re = re + k.re;
    ergebnis.im = im + k.im;
    return ergebnis;

die dazugehörige maindatei lautet:

    public class Beispiel {
    public static void main( String[] args) {
    Komplex k1 = new Komplex();
    k1.re = 0.3;
    k1.im = -0.4;
    Komplex k2 = new Komplex();
    k2.re = 2.5; k2.im =1.25;
    Komplex k3 = k1.addieren(k2);
    System.out.println("re="+k3.re);
    System.out.println("im="+k3.im);

ich bin mir nicht sicher, wie ich die dritte Zeile der Klasse Beispiel 
interpretieren soll

public Komplex addieren(Komplex k) {

--> ist Komlex hier der Datentyp?

--> ist addieren hier eine Methode der Klasse Komplex?

--> bedeutet das (Komplex k) dass k eine Variable vom Datentyp Komplex 
ist?

Wenn ich jetzt davon ausgehe, dass addieren eine Methode ist: Methoden 
bekommen ja immer ein () dahinter. Wann muss ich was in die Klammer 
reinschreiben und wann bleibt sie leer?

Bedeutet diese Zeile: Komplex ergebnis = new Komplex(); dass ich eine 
Variable vom Datentyp Komplex anlege? Warum brauche ich hier das =new 
Komplex(); nochmal dahinter

Da bin ich dann gar nicht mehr dahintergestiegen was da bedeuten soll???

ergebnis.re = re + k.re;

ergebnis.im = im + k.im;

Ich freue mich auf Eure Antworten! Im Vorraus schon mal vielen Dank!

von Chris R. (hownottobeseen)


Lesenswert?

Relchen schrieb:
> --> ist Komlex hier der Datentyp?
> --> ist addieren hier eine Methode der Klasse Komplex?
> --> bedeutet das (Komplex k) dass k eine Variable vom Datentyp Komplex
> ist?

dreimal ja

Relchen schrieb:
> Bedeutet diese Zeile: Komplex ergebnis = new Komplex(); dass ich eine
> Variable vom Datentyp Komplex anlege?

auch richtig (korrigiere: Es ist ein Objekt der Klasse Komplex)

> Warum brauche ich hier das =new
> Komplex(); nochmal dahinter

wenn du "Komplex ergebnis;" machst hast du nur den Speicher 
initialisiert, es steht aber noch kein Objekt dahinter, wobei manche 
Compiler das Objekt hinter dem Speicher automatisch instanziieren.

> ergebnis.re = re + k.re;
>
> ergebnis.im = im + k.im;

re und im kommen aus dem aktuellen Objekt. Mit "k." greifst du auf die 
Attribute des anderen Objekts zu.
Anschließend weist du es dem Objekt ergebnis zu.

In dem Objekt ergebnis steht dann in den Attributen (=Variablen) re und 
im die Summe der beiden Berechnungen.

HTH

von Relchen (Gast)


Lesenswert?

Erst mal vielen Dank für die Antwort! Nun bin ich schon ein großes Stück 
weiter. Eine Frage ist jetzt für mich noch offen geblieben. Und zwar 
steht ja in der dritten Zeile der Klasse Komplex:

public Komplex addieren(Komplex k) {

In der Klammer steht ja jetzt , dass k eine Variable vom Typ Komplex 
ist. Wann muss ich in die Klammer hinter die Methode was reinschreiben 
und wann bleibt sie leer? Hat das was mit der Übergabe zu tun?

von Thomas W. (thomas100)


Lesenswert?

> Hallo zusammen,
Hallo Relchen,

erst mal schöner formatieren, dann erkennt man auch, dass schließende 
Klammern fehlern. Außerdem solltest du uns die Programmiersprache 
angeben. Ich nehme an: C#?
1
public class Komplex
2
{
3
    public double re, im;
4
5
    public Komplex addieren (Komplex k)
6
    {
7
        Komplex ergebnis = new Komplex();
8
        ergebnis.re = re + k.re;
9
        ergebnis.im = im + k.im;
10
        return ergebnis;
11
    }
12
}
13
 
14
public class Beispiel
15
{
16
    public static void main( String[] args)
17
    {
18
        Komplex k1 = new Komplex();
19
        k1.re = 0.3;
20
        k1.im = -0.4;
21
        Komplex k2 = new Komplex();
22
        k2.re = 2.5; k2.im =1.25;
23
        Komplex k3 = k1.addieren(k2);
24
        System.out.println("re="+k3.re);
25
        System.out.println("im="+k3.im);
26
    }
27
}

> ich bin mir nicht sicher, wie ich die dritte Zeile der Klasse Beispiel
> interpretieren soll
>
> public Komplex addieren(Komplex k) {
> --> ist Komlex hier der Datentyp?
> --> ist addieren hier eine Methode der Klasse Komplex?
> --> bedeutet das (Komplex k) dass k eine Variable vom Datentyp Komplex
> ist?

Vereinfacht gesagt: ja. k ist ein Objekt vom Typ Komplex.


> Wenn ich jetzt davon ausgehe, dass addieren eine Methode ist: Methoden
> bekommen ja immer ein () dahinter. Wann muss ich was in die Klammer
> reinschreiben und wann bleibt sie leer?

Da "addieren" mit "public Komplex addieren(Komplex k);" deklariert ist, 
MUSS beim Aufruf der Parameter angegeben werden. In deinem Fall also vom 
Typ Komplex.


> Bedeutet diese Zeile: Komplex ergebnis = new Komplex(); dass ich eine
> Variable vom Datentyp Komplex anlege? Warum brauche ich hier das =new
> Komplex(); nochmal dahinter

Du legst ein Objekt vom Typ Komplex an.
Du willst hier ein Objekt haben, nicht nur einen Zeiger vom Typ Komplex.
Und das wird in C#  mit "new" angelegt.

> Da bin ich dann gar nicht mehr dahintergestiegen was da bedeuten soll???
> ergebnis.re = re + k.re;
> ergebnis.im = im + k.im;

"Ergebnis" ist vom Typ Komplex und die Klasse definiert zwei 
Membervariablen, nämlich "re" und "im".
Diesen beiden Variablen weist du jetzt die Summe aus re (des aktuellen 
Objekts) und der übergebenen Objekts k zu. Das gleiche passiert mit im.
Eine bessere Schreibweise wäre:
1
ergebnis.re = this.re + k.re;
2
ergebnis.im = this.im + k.im;

Gruß
Thomas

von Thomas W. (thomas100)


Lesenswert?

Relchen schrieb:
> Wann muss ich in die Klammer hinter die Methode was reinschreiben
> und wann bleibt sie leer? Hat das was mit der Übergabe zu tun?

Du musst da was reinschreiben, sobald du der Methode was übergeben 
willst.
Es gibt auch Methoden, da brauchst du nichts rein zu schreiben.
Wenn deine Klasse z.B. eine Funktion "clear" hätte, dann würde das so 
aussehen:
1
public void clear (void);
Aufruf:
1
Komplex k1 = new Komplex();
2
k1.clear ();

Hier kannst und darfst du auch nichts in die Klammer schreiben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.