2. Übungsblatt - Abgabe: 28. November

http://pp.info.uni-karlsruhe.de/lehre/W ... rn/b02.pdf
markusj
Beiträge: 164
Registriert: Do 23. Okt 2008, 22:07

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von markusj »

Der Konstruktor gibt bereits das Objekt zurück, also eher nein!

mfG
Markus

Edit: Da der Konstruktor keinen Typ hat, kann er auch nichts returnen.
Ferner war nicht gefordert, dass du die Überweisung gegen Überziehen absicherst.
Und == ist ein Vergleichsoperator, keine Zuweisung (im übrigen ist die Zuweisung Kontostand = Kontostand auch sinnlos.)
Und ich weiß nicht, welche Währung du verwendest, aber in Europa gibt es neben Euros auch noch Cents, du benötigst also Kommazahlen.
Benutzeravatar
Dit
Beiträge: 12
Registriert: Do 13. Nov 2008, 18:38
Kontaktdaten:

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Dit »

so ? :unknown:

Code: Alles auswählen

public class Account {
    //Attribute
    String kontoinhaber;
    int kontostand;
    //Konstruktormethode
    public Account ( String kontoinhaber , int kontostand ) {
        this.kontoinhaber = kontoinhaber;
        this.kontostand = kontostand;
    }
    int finstatus (int kontostand) {
        return (kontostand);
    }
    public void einzahlung ( int betrag ) { 
        kontostand += betrag;
    }
    public void ueberweisung ( int betrag ) {
        if (kontostand >= betrag) { 
            kontostand -= betrag; 
        }
        if (kontostand <= betrag) { 
            kontostand == kontostand; 
        }
    }
    
}
Scotty_doesn't_know
Beiträge: 9
Registriert: So 9. Nov 2008, 12:29

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Scotty_doesn't_know »

hab nochmal nachgeguckt! die konstruktormethode ist per default "void", gibt also keinen wert zurück!

@dit: bei deiner überweisungsmethode stimmt auch was nicht. ich würde

Code: Alles auswählen

if (condition) {
}
else{
}
schreiben! außerdem ist

Code: Alles auswählen

kontostand == kontostand 
ein vergleich! aber kontostand = kontostand kannst du dir auch sparen!

edit: zu langsam :(
Benutzeravatar
Dit
Beiträge: 12
Registriert: Do 13. Nov 2008, 18:38
Kontaktdaten:

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Dit »

:friends:

Muss ich überhaupt die Fallunterscheidung machen?

Code: Alles auswählen

public class Account {
    //Attribute
    String kontoinhaber;
    double kontostand;
    //Konstruktormethode
    public Account ( String kontoinhaber , double kontostand ) {
        this.kontoinhaber = kontoinhaber;
        this.kontostand = kontostand;
    }
    double finstatus (double kontostand) {
        return (kontostand);
    }
    public void einzahlung ( double betrag ) { 
        kontostand += betrag;
    }
    public void ueberweisung ( double betrag ) {
        if          (kontostand >= betrag) { kontostand -= betrag; }
        else if    (kontostand <= betrag) { kontostand -= 0.0; }
    }
    
}
markusj
Beiträge: 164
Registriert: Do 23. Okt 2008, 22:07

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von markusj »

markusj hat geschrieben:Ferner war nicht gefordert, dass du die Überweisung gegen Überziehen absicherst.
mfG
Markus
Scotty_doesn't_know
Beiträge: 9
Registriert: So 9. Nov 2008, 12:29

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Scotty_doesn't_know »

also falsch ist diese fallunterscheidung sicher nicht. Du hast sie geschrieben, also lass sie drin!

Code: Alles auswählen

    public void ueberweisung ( double betrag ) {
        if          (kontostand >= betrag) { kontostand -= betrag; }
        else { 
                kontostand -= 0.0; }
        }
so ist es richtig! du kannst theoretisch auch 2x if verwenden, dann darf aber nur einmal das = mit einbezogen sein also entweder <= und > oder >= und <.
else ist hier imo aber besser!
wie du die klammern anordnest ist mehr oder weniger egal. Was stilistisch richtig ist weiß ich nicht. von Firmen wird das intern geregelt!
markusj
Beiträge: 164
Registriert: Do 23. Okt 2008, 22:07

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von markusj »

Scotty_doesn't_know hat geschrieben:also falsch ist diese fallunterscheidung sicher nicht. Du hast sie geschrieben, also lass sie drin!
...
wie du die klammern anordnest ist mehr oder weniger egal. Was stilistisch richtig ist weiß ich nicht. von Firmen wird das intern geregelt!
Er hat gefragt, ob er fallunterscheiden muss, die Antwort ist Nein!
Und zu den Klammern: Für uns gelten die Java Code Conventions, an die wir uns zu halten haben. Später wird der Praktomat dafür auch Punkte geben/abziehen!

mfG
Markus
Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von salami »

Wenn ihr das Geld nur abbucht, wenn genug auf dem Konto ist, dann passt in der Transfer-Klasse auf, dass dem Empfänger das Geld auch nur gutgeschrieben wird, wenn es dem anderen auch abgebucht wurde. ;)

Ich hab es einfach so gemacht, dass die Konten überzogen werden können. Ist am einfachsten und nicht gegen die Vorgabe. Ich vermute, dass es sogar so gewollt ist. Wenn man es anders macht ist es natürlich trotzdem nicht falsch.

PS: Tipp fürs Leben: Macht einfach genug Schulden, irgendwann ist man wieder im positiven Bereich. :D
Baloo
Beiträge: 25
Registriert: So 9. Nov 2008, 20:10
Wohnort: Neureut
Kontaktdaten:

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Baloo »

vlt. noch ein paar kleinere Tipps:
  • versucht ausdrucksstärkere Namen für eure Methoden zu finden (immer auch an größere Projekte denken, der Code soll möglichst schnell nachvollziehbar sein)
    wie zum Beispiel für den Kontostand getKontoStand(), oder für das Kontobewegungen geldEinzahlen() bzw. geldAbheben(); Es kann muss ja schließlich nicht auschließlich geld durch Überweisungen aufs Konto...
  • Vorhin gabs glaub Probleme mit 1/3 oder so. Der Ursprung dieses Problems liegt hier im sogenannten Type Casting
    Beispiel:

    Code: Alles auswählen

    double a,b,c;
    a=b=c=0.5;
    double d = 1/3*(a+b+c);  //ergebnis: 0
    double e = 1.0/3*(a+b+c); //ergebnis: 0.5
    
    Der Javacompiler geht dabei so vor:
    Er fängt vorne an zu lesen und erkennt das 1 ein Integer ist. Danach versucht er aus den ganzen Teilen der Rechnung (1/3, a+b+c) Integer zu Casten. (0.5 rundet er ab wird zu 0, 1/3 wird auch abgerundet und wird zu 0) Dadurch entstehen Fehler.
    Deswegen muss man ihm explizit sagen was er machen soll. Dafür gibt es zwei Möglichkeiten: Die erste Zahl , hier 1, als "Fließkommazahl" zu schreiben, also 1.0 oder ihm sagen was rauskommen/ mit was er rechnen soll. Das geht mit dem Cast:

    Code: Alles auswählen

    double e = (double) 1/3*(a+b+c);  //ergebnis: 0.5
    
In dem Sinne... PROST :beer:
The main rules of optimization
Rule 1: Don't do it.
Rule 2: (For experts only) Don't do it yet.
Benutzeravatar
Lucky
Beiträge: 20
Registriert: Sa 8. Nov 2008, 08:43

Re: 2. Übungsblatt - Abgabe: 28. November

Beitrag von Lucky »

salami hat geschrieben:Wenn ihr das Geld nur abbucht, wenn genug auf dem Konto ist, dann passt in der Transfer-Klasse auf, dass dem Empfänger das Geld auch nur gutgeschrieben wird, wenn es dem anderen auch abgebucht wurde. ;)

Ich hab es einfach so gemacht, dass die Konten überzogen werden können. Ist am einfachsten und nicht gegen die Vorgabe. Ich vermute, dass es sogar so gewollt ist. Wenn man es anders macht ist es natürlich trotzdem nicht falsch.

PS: Tipp fürs Leben: Macht einfach genug Schulden, irgendwann ist man wieder im positiven Bereich. :D
es gibt doch dispo-kredit :D
Antworten

Zurück zu „Blatt 2 - Abgabe 28.11.08“