Deklaration und Aufruf von Objekten

  • Hey :)

    Ich studiere kein Informatik, muss jedoch 1 Semester "Einführung in die Informatik" belegen .

    Dabei beschäftigen wir uns mit java und habe extreme Probleme .

    Kann einer von euch die Nummer 2 beantworten und mir gleich sagen wie sie funktioniert ? ich probiere es seit 4-5 stunden und ich komme auf das ergebnis "5" nicht, wenn sie überhaupt richtig ist.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

  • Vorweg: Bitte nicht zur Gewohnheit machen, sich für Hausaufgaben in irgendwelchen Onlineforen anzumelden und sie dort von anderen machen zu lassen. Nachdem die Erklärung eine Sache von drei Minuten ist will ich aber mal nicht so sein...

    Drei Punkte:

    1. Das gezeigte Programm ist kein korrektes Java-Programm. Es würde nicht kompilieren, da das Objekt rech2 nicht deklariert wurde, man aber davon eine Methode aufrufen will.
    2. Die Frage müsste, da die Variable "ergebnis" eine Objektvariable ist, eigentlich spezifieren, von welchem Objekt man diesen Variablenwert wissen möchte. Objektvariable heißt, dass mehrere "RechnerD"-Objekte verschiedene Werte für ergebnis speichern (im Gegensatz zu Klassenvariablen, die ihr wahrscheinlich auch schon einmal irgendwo behandelt habt). Da im gezeigten Code nur rech1 korrekt deklariert und initialisiert wurde, nehme ich einmal an, dass die ergebnis-Variable von rech1 gesucht ist (kurz: rech1.ergebnis).
    3. Von rech1 werden zwei Methoden aufgerufen. Zuerst addition(), dann multiplikation(). Erstere weist ergebnis den Wert x + y zu, und x + y sind gleich 1 und 5. Nach diesem Aufruf hat rech1.ergebnis also den Wert 6. Danach wird jedoch rech1.multiplikation() aufgerufen, und in dieser Methode wird ergebnis ein neuer Wert zugewiesen, nämlich x * y. Und 1 * 5 ist 5. Das ist eigentlich schon alles...

    So, und bitte in Zukunft die Lernunterlagen heranziehen, bevor du mit so einer Frage kommst. 4-5 Stunden für 10 Zeilen Code, naja, ich tu jetzt mal so als hätte ich diese Behauptung überlesen ;)

    Zitat von wolowizard

    alle angaben wie immer ohne gewehr.

    Na, das hoffen wir doch :D

    Einmal editiert, zuletzt von teenious (16. November 2014 um 20:26)

  • Erstmal vielen Danke für deine Antwort :) . Das heißt einfach das ich die ganzen Rechnungen, die ich gemacht habe umsonst waren , weil es keine Rechnungen gibt oder wie ? Wenn die Aufgabe heißen würde : " Welcher Wert befindet sich in den Variablen x und y nach Arbeitung des gesamtes Programmes ? " wäre die Antwort x=1 und y =5 außer bei der Addition wäre sie 5 und 8 oder hab ich das falsch verstanden ? Wenn da jetzt "RechnerD rech2= new Rechner() hinzukommen würde, würde erst dann ein Rechnung enstehen ?

    Ich bin eine Informatik Niete und das ist jetzt nicht so gesagt.

    Einmal editiert, zuletzt von Informatik (16. November 2014 um 21:01)

  • Zitat

    Das heißt einfach das ich die ganzen Rechnungen, die ich gemacht habe umsonst waren , weil es keine Rechnungen gibt oder wie ?

    Also korrekt spricht man davon, dass das Programm nicht kompiliert. Der Compiler, der das Programm vor der Ausführung für den Computer übersetzen muss, weiß nämlich nicht, was "rech2" sein soll. Das heißt, das Programm kann man auch nicht ausführen und es gibt keine Rechnungen.

    Zitat

    Wenn die Aufgabe heißen würde : " Welcher Wert befindet sich in den Variablen x und y nach Arbeitung des gesamtes Programmes ? " wäre die Antwort x=1 und y =5 außer bei der Addition wäre sie 5 und 8 oder hab ich das falsch verstanden ?

    x und y werden im gesamten Ablauf des Programms nicht verändert. Du erkennst das daran, dass nirgends, außer bei der Deklaration dieser Variablen ganz oben, Zuweisungen der Art x = ... oder y = ... stehen. Das heißt (wenn wir einmal die fehlerhafte Zeile mit rech2 rausstreichen), dass nach Ausführung des Programms noch immer x = 1 und y = 5 gilt. Die aufgerufenen Methoden schreiben zwar Werte auf die Variablen "ergebnis" und "plus2", aber eben nicht auf x oder y. Auch bei Aufruf der Addition gilt daher x = 1 und y = 5, außerdem plus2 = 3 und ergebnis = 6, aber das wäre ja dann nicht gefragt.

    Zitat

    Wenn da jetzt "RechnerD rech2= new Rechner() hinzukommen würde, würde erst dann ein Rechnung enstehen ?

    Ganz korrekt müsste da stehen:

    Code
    RechnerD rech2 = new RechnerD();

    Und zwar irgendwo vor dem Aufruf von rech2.division(). Dann könnte man das Programm kompilieren und durchlaufen lassen, und, um es in deinen Worten zu sagen, es würden Rechnungen entstehen.

    lg teenious

    Zitat von wolowizard

    alle angaben wie immer ohne gewehr.

    Na, das hoffen wir doch :D

  • Super jetzt versteh ich es langsam . Riesen Respekt für euch Informatiker :verycool:. Wenn da jetzt :

    Rechner rech1 = new Rechner () ;
    Rechner rech2 = new Rechner ();

    rech1.addition () ;
    rech1.multiplikation () ;

    zur Frage : Welcher Wert befindet sich in den Variablen ergebnis nach Abarbeitung des gesamtes Programmes ?

    stehen würde , wäre dann die Antwort einmal = 6 und 5 sein oder ? Oder müsste ich die beiden Zahlen zusammen addieren bzw multiplizieren.

    Und wenn dann anstatt rech1.multiplikation () ; dann rech2.multiplikation () ; nehmen würde, wäre es im Ergebnis ein Unterschied ?


    Sorry für die vielen Fragen und vielen Dank dir nochmal

  • Wenn da jetzt :

    Rechner rech1 = new Rechner () ;
    Rechner rech2 = new Rechner ();

    rech1.addition () ;
    rech1.multiplikation () ;

    zur Frage : Welcher Wert befindet sich in den Variablen ergebnis nach Abarbeitung des gesamtes Programmes ?

    stehen würde , wäre dann die Antwort einmal = 6 und 5 sein oder ? Oder müsste ich die beiden Zahlen zusammen addieren bzw multiplizieren.

    Naja, ich glaube hier hast du noch ein Verständnisproblem. Zu einem Zeitpunkt kann ja nur ein einzelner Wert in einer Variable stehen. Also kann nach Abarbeitung des gesamten Programmes ergebnis nicht gleichzeitig 6 und 5 sein.
    Zeilenmäßig betrachtet wird es dir glaube ich klar:
    Nach der ersten Zeile ist rech1.ergebnis = 0, da dies der "Standardwert" ist, mit dem die Variable initialisiert wird.
    Nach der Zeile mit der Addition ist rech1.ergebnis = 6, da das Ergebnis der Addition hineingeschrieben wurde.
    Und nach der Zeile mit der Multiplikation ist rech1.ergebnis = 5, da 5*1 hineingeschrieben wurde. Dir muss klar sein, dass beim Zuweisen eines Wertes an eine Variable der alte Wert einfach weg ist.
    (rech2.ergebnis bleibt während des gesamten Ablaufs unverändert auf dem "Standardwert", also rech2.ergebnis = 0)

    Zitat


    Und wenn dann anstatt rech1.multiplikation () ; dann rech2.multiplikation () ; nehmen würde, wäre es im Ergebnis ein Unterschied ?

    Das überlasse ich dir, mit all den bisherigen Erklärungen, jetzt selbst zum Überlegen ;) Wie gesagt: Bedenke, dass bei mehreren Rechner-Objekten die Frage "Welchen Wert hat die Variable ergebnis?" nicht eindeutig ist. In rech1 kann ein anderes ergebnis als in rech2 stehen, und es muss ja auch nicht nur bei zwei Rechnern bleiben... :)

    Zitat


    Sorry für die vielen Fragen und vielen Dank dir nochmal

    Kein Problem.

    lg teenious

    Zitat von wolowizard

    alle angaben wie immer ohne gewehr.

    Na, das hoffen wir doch :D

  • "Dir muss klar sein, dass beim Zuweisen eines Wertes an eine Variable der alte Wert einfach weg ist. " , das war der entscheidene Satz.


    "Das überlasse ich dir, mit all den bisherigen Erklärungen, jetzt selbst zum Überlegen ;) Wie gesagt: Bedenke, dass bei mehreren Rechner-Objekten die Frage "Welchen Wert hat die Variable ergebnis?" nicht eindeutig ist. In rech1 kann ein anderes ergebnis als in rech2 stehen, und es muss ja auch nicht nur bei zwei Rechnern bleiben..."

    rech1.multiplikation () ; dann rech2.multiplikation ()

    6und 5

    Ich dachte immer wieder das ich das Ergebnis zusammenfassen muss und habe dabei nicht gedacht, dass beim "Zuweisen eines Wertes an eine Variable der alte Wert einfach weg ist".

    Ich bedanke mich vielmals

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!