Seite 5 von 10 ErsteErste 123456789 ... LetzteLetzte
Ergebnis 61 bis 75 von 141

Thema: Garf will Java-Programmierer werden - und schafft es nicht. Hilfe!

  1. #61
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Du kannst den return-Wert einer Methode nicht "abrufen" (soll heißen, zumindest nicht in dem Sinne, in dem du es dir vorzustellen scheinst).
    Du kannst es dir so vorstellen, dass, sofern der return type nicht void ist, an der Stelle, an der die Methode aufgerufen wird, der entsprechende Wert returnValue vom return steht (nach dem Schema "return returnValue;"), nachdem sie ausgeführt wurde. Diesen Wert wiederum weist du dann einer Variable zu (bzw. verarbeitest ihn weiter, je nachdem was du machen willst).
    Als Beispiel:
    PHP-Code:
    private int bla(){
        return 
    3//Methode, die einfach nur 3 zurück gibt
    }

    private 
    void blubb{
        
    int i bla(); // nimmt das Ergebnis der Methode bla() und speichert es in i, i wäre dann 3


    ...
    Hatte ich schonmal erwähnt, dass ich lahm bin?
    Geändert von Quietsch (04. Mai 2013 um 15:53 Uhr)

  2. #62
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Allerdings hätte man bei deiner zweiten Methode keine Chance, auf die Variable zuzugreifen
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  3. #63
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Quietsch Beitrag anzeigen
    ...
    Hatte ich schonmal erwähnt, dass ich lahm bin?
    Bin mir jetzt nicht sicher, ob ich dich korrekterweise mit dem Besitz eines Porsches in Verbindung bringe?! Aber den musst du dann abgeben!

  4. #64
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Wer will auch auf Variablen zugreifen.
    Ehrlich gesagt war ich nur zu faul, ohne auto-complete noch 'n System.out.println hinzuschreiben. Und für 'ne Klassenvariable die die Variable bekommt, hätte ich erst noch 'ne Klasse drumrumschreiben müssen.

    Und den Porsche würde ich gerne abgeben - weil ich ihn dann erstmal hätte.

  5. #65
    Seufz Avatar von GarfieldMcSnoopy
    Registriert seit
    24.08.06
    Beiträge
    6.904
    Dank eurer Nachhilfe hab ich nicht nur ein ähnliches Programm geschrieben, das halbwegs funktioniert, sondern zudem mit return gearbeitet UND die grundlegenden Berechnungen gleich im Konstruktor ausgeführt Muss mich nur noch entscheiden, ob ich als Nächstes ein neues Battlefield oder doch eher eine Universums-Simulation programmiere...

    Jedenfalls vielen Dank!
    Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)

  6. #66
    Seufz Avatar von GarfieldMcSnoopy
    Registriert seit
    24.08.06
    Beiträge
    6.904
    Sooooo-hoooo: Nachdem ich jetzt mit Objekten und Zuweisungen und Attributen und ähnlichem Hexenzeugs rumexperimentiert habe, kommen wir zum leicht fortgeschrittenen Teil des Vergnügens!

    Folgendes Problem: Ich habe eine Superklasse, in der ein String kontonummer und ein double kontostand verwendet werden. Nun erstelle ich eine Subklasse, die mehrere Methoden der Superklasse erbt, diese aber um ein neues Attribut double limit erweitert. In einer dritten, der main-Klasse gebe ich nun Werte für String kontonummer und double kontostand sowie das neue Attributdouble limit aus. In vollendeter Harmonie klappt alles, es ist fast schon kitschig.

    Jetzt hat mich das Lehrbuch aber über Sichtbarkeit und Privatsphäre etc. informiert (was ihr ja schon angesprochen hattet). Ich setze also die Variablen der SUperklasse auf private.

    Mein Problem ist nun das double kontostand der Superklasse. Der String kontonummer wird lediglich überschrieben, das klappt auch, wenn String kontonummer auf private steht. Mit double kontostand werden nun aber in der Subklasse ganz neue Dinge angestellt (Methode auszahlen ist anders als in der Superklasse). Das funktioniert aber nicht, wenn kontostand in der Superklasse auf private steht (auf protected hingegen schon).

    PHP-Code:
    public class Girokonto extends Konto {
        
        
    double limit;
            
        
        public 
    double getLimit() {
            return 
    limit;
        }

        public 
    void setLimit(double limit) {
            
    this.limit = (limit);
        }

        
    Girokonto(String kontonummerdouble kontostanddouble limit) {
        
        
    super(kontonummerkontostand);
        
    this.limit limit;
         
        }

        
    double auszahlen(double a) {
        if ((
    kontostand a) < (-limit)) {
            
    System.out.print("Limit überschritten!");
            return 
    kontostand; }
        else {
            
    kontostand = (kontostand a);
            
    System.out.print("Transaktion möglich!");
            return 
    kontostand; }
        }
        
        
        
        
    Girokonto() {
        
    limit 0;
        }
        
        
        

    Meine Frage: Wenn ich die Methode abändere - darf ich dann halt die Variable in der Superklasse nicht auf private stellen? Wieso kann ich in der Main Class die Stringvariable überschreiben, die double-Variabel aber nicht? Hexerei? Sonnenflecken? Eine Regierungsverschwörung? Oder wie oder was?
    Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)

  7. #67
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    private Attribute sind nur innerhalb der definierenden Klasse sichtbar, protected Attribute auch in den Unterklassen. So einfach ist das Wenn Du in der Unterklasse eine Methode der Oberklasse redefinieren willst, dann kannst Du da nicht auf private attribute zugreifen. i.A. würde man für (fast) alle Attribute Setter- und getter Methoden anbieten, die die gewünschte Sichtbarkeit haben, die Attibute selbst sind privat und insbesondere die setter-Methode hat noch Prüfungen, damit man keinen Blödsinn in die Attribute reinhackt ...
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  8. #68
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Wie sieht denn der restliche Code aus? Insbesondere, wie Konto definiert ist.

  9. #69
    Seufz Avatar von GarfieldMcSnoopy
    Registriert seit
    24.08.06
    Beiträge
    6.904
    @Peregrin: Danke für die Klarstellung!

    @AlphaCiv: Ach, der ist recht irrelevant. Das Lehrbuch stammt von nem Mathe-Professor, der dauernd so blöde Vorgaben macht. Für Objekt-Programmierung würden's einfache Additionen auch tun, um zu sehen, ob die Objekt-Zugriffe klappen, aber nö, es müssen Kreissegment-Berechnung, Girokonto-Aktualisierungen und so Zeug sein Mathe-Professoren halt
    Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)

  10. #70
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Ich wollte noch was nachtragen:

    Wenn man im "richtigen Leben" programmiert, sind die Klassen häufig ein technisches Vehikel, so ist z.B. eine Benutzeroberfläche in Java auch objektorientiert geschrieben, dann sind da die ganzen Klassenbibliotheken, bei denen die Klassen auch nichts mit den Objekten zu tun haben, mit denen der Endanwender nachher zu tun hat. Damit nun die Programmierer, die für den Endnutzer schreiben die ihnen zur Verfügung gestellten Klassen nicht "missbrauchen" geht man hin und definiert die Attribute der Objekte "privat". Dann bietet man getter-Methoden für die Atribute an, die sind meistens öffentlich, d.h. in jeder Klasse können diese Methoden verwendet werden. Dann bietet man auch noch setter-Methoden, die aber 1.) meist nicht für jedes Attribut und die 2.) die Eingabe prüfen, evtl. notwendige Änderungen an abhängigen Attributen durchführen usw. Bei den setter-Methoden kann man dann manche nur für Unterklassen anbieten, manche öffentlich und hat so eine ziemlich gute Feinsteuerung darüber wer was mit welchen Attributen machen kann.

    Wenn man z.B. dein Kreisobjekt betrachtet, wäre es eine sinnvolle Aufteilung, die Attribute Radius, Umfang und Fläche privat zu definieren und dem Konstruktor (der auch nur eine besondere Methode ist) den Radius zu übergeben, und der führt dann die entsprechenden Berechnungen für Umfang und Fläche durch. Für die Attribute Umfang und Fläche gibt man dann getter-Methoden mit, aber keine setter-Methoden, für den Radius gibt man eine getter und eine setter-Methode mit, die setter-Methode prüft dann aber (wie auch der Konstruktor), dass der Radius positiv ist und berechnet sofort Umfang und Fläche neu.
    Schließlich spendiert man noch eine toString()-Methode für den Kreis, der dann eine Ausgabe der Form "Der Kreis <objektname> hat den Radius r, die Fläche F und den Umfang U".

    Ein sinnvolles Unterobjekt wäre der "Kreis mit Mittelpunkt", bei dem man auch noch einen Mittelpunkt im Konstruktor mitgibt. Diesem Kreis spendiert man dann eine neue toString()-Methode und eine Methode, die man mit einem Punkt füttert und man bekommt raus, ob der Punkt im Kreis ist, auf dem Kreis oder außerhalb des Kreises, die sollte auch wieder public sein. Die getter-Methoden der superklasse bleiben aber erhalten und auch die setter-Methode für den Radius braucht man nicht ändern. Leider fällt mir kein gutes protected-Attribut oder eine sinnvolle protected-Methode für den abstrakten Kreis ein.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  11. #71
    Seufz Avatar von GarfieldMcSnoopy
    Registriert seit
    24.08.06
    Beiträge
    6.904
    Wer ist wieder da? Der doofe Garfield...

    Ich muss gestehen, dass ich trotz eurer tollen Hilfe echte Schwierigkeiten habe, mit abstraktem Zeugs wie Objektzugriffen etc. umzugehen. Bzw. es so zu kapieren, dass ich es mühelos umsetzen könnte. Ihr meint, es wäre klüger, mir ein anderes Hobby zu suchen?



    Das wäre damit wohl endgültig geklärt!

    So, zur Sache. Ich habe eine kleine Verständnisfrage. Das Programm soll nur Fläche und Umfang ausrechnen und ausgeben. Hier das Programm in all seiner Pracht und Schönheit (man beachte, dass die Berechnungen im Konstruktor erfolgen. Ja, so muss ein Java-Konstruktor aussehen! ):

    PHP-Code:
    /* class-Test mit Kreis als MacGuffin */

    import javax.swing.JOptionPane;

    class 
    Kreis {
        
        
    double radiusAU;


        
    Kreis(double r) {    
        
    double radiusAU// [SIZE=3]HIER FÄNGT DER FISCH ZUM STINKEN AN!!!![/SIZE]
        
    radius r;
           
        while (
    radius <= 0) {
            
    String rad;
            
    rad JOptionPane.showInputDialog("Bitte positiven Radius eingeben: ");
            
    radius Double.parseDouble(rad);
        }
        
    = ((radius radius) * Math.PI);
        
    = ((radius) * Math.PI); 
        
    JOptionPane.showMessageDialog(null"Radius: " radius ";" " Fläche: " ";" " Umfang: " U);

    }
        
     
    void Ausgabe() {
          
    JOptionPane.showMessageDialog(null"Radius: " radius ";" " Fläche: " ";" " Umfang: " U);
        } 


    : Beim Konstruktor Kreis(double r) definiere ich Variablen, die ich direkt zu Beginn des Objekts "Kreis" auch ins Leben gerufen habe. Das funktioniert nicht. Hat mich auch nur 3 Stunden gekostet, rauszufinden, warum das Programm nicht geklappt hat Wie dem auch sei: Wenn ich A und U also im Konstruktor benenne, klappt zwar die JOptionPane-Ausgabe im Konstruktor, die in der Methode ausgabe aber nicht. (Bennene ich A und U im Konstruktor nicht, dann ist alles pipifein). Die Frage: Innerhalb einer Methode definierte Variablen "leben" nur innerhalb dieser Methode - will ich die Ergebnisse auch in anderen Methoden derselben Klasse verwenden, muss ich die Variablen in der allgemeinen Klasse benennen. Seh ich das richtig?
    Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)

  12. #72
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    ja.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  13. #73
    Seufz Avatar von GarfieldMcSnoopy
    Registriert seit
    24.08.06
    Beiträge
    6.904
    Alles klar. Danke Dir! (Mal wieder )
    Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)

  14. #74
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Noch zwei oder drei Worte oder Sätze dazu: wenn Du innerhalb einer Methode, die nicht static ist, auf das Objektattribut zugreifen willst, benutzt Du this.<variable>. Beispiel:

    PHP-Code:
    class Example{
    int some_attribute;
    double some_other_attribute;

    Example(int some_attributedouble input){
    some_attribute some_attribute;
    some_other_attribute input;

    Hier wird das Attribut some_attribute nicht gefüllt.
    PHP-Code:
    class Example{
    int some_attribute;
    double some_other_attribute;

    Example(int some_attributedouble input){
    this.some_attribute some_attribute;
    some_other_attribute input;

    Hier schon.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  15. #75
    Seufz Avatar von GarfieldMcSnoopy
    Registriert seit
    24.08.06
    Beiträge
    6.904
    Wow, erstmals wird mir die Bedeutung von this halbwegs klar Solltest ein Java-Lernbuch schreiben, ich würd's kaufen! Danke schöööön!
    Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)

Seite 5 von 10 ErsteErste 123456789 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •