www.mikrocontroller.net

Forum: PC-Programmierung Brauche Hilfe beim Verstehen dieses Quelltextes


Autor: Relchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Chris R. (hownottobeseen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Relchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Weyhrauch (thomas100)
Datum:

Bewertung
0 lesenswert
nicht 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#?
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;
    }
}
 
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?

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:
ergebnis.re = this.re + k.re;
ergebnis.im = this.im + k.im;

Gruß
Thomas

Autor: Thomas Weyhrauch (thomas100)
Datum:

Bewertung
0 lesenswert
nicht 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:
public void clear (void);
Aufruf:
Komplex k1 = new Komplex();
k1.clear ();

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.