non-static Fehler

LeFlair

Mitglied
Moin,
ich hatte den Fehler schon relativ oft, aber nie richtig verstanden wie ich ihn Lösen kann.
Ich hoffe einfach das ich mit eurer Hilfe endlich verstehe wie genau ich das Problem angehen muss und dann lösen kann.
Hier einmal mein Code:
In der letzten Methode sagt er mir bei Sparkonto.einzahlung(sparbetrag); den Static Fehler bei einzahlung.

Java:
import java.util.Calendar;
import java.util.ArrayList;
/**
 * Beschreiben Sie hier die Klasse Konto.
 *
 * @author ()
 * @version (2.0)
 */
//Klasse
public class Konto
{
    //nummer bleibt erhalten und zählt hoch bei Konstruktoraufruf
    private static int nummer = 101000;
    //Kontonummer
    private int kontonummer;
    //Name des Inhabers
    private Inhaber inhaber;
    //Zugriffs Variable für Sparkonto
    private Sparkonto sparbetrag;
    //Kontostand
    private int kontostand;
    
    private String datum;
    
    private Inhaber nutzer;
    
    private ArrayList<String> buchungen;
    
    //Kontoeröffnung
    public Konto(Inhaber kunde, String ttmmjj)
    {
        Kalender(ttmmjj);
        inhaber = kunde;
        kontostand = 0;
        kontonummer = nummer;
        nummer += 1;
        buchungen = new ArrayList<String>();
        buchungen.add(datum + "\nKontoeröffnung");
    }
    //Kontoeröffnung mit Einzahlung
    public Konto(int einzahlung, Inhaber kunde, String ttmmjj)
    {
        if(einzahlung < 0) {
            throw new RuntimeException("Betrag muss Positiv sein!");
        }
        else {
            Kalender(ttmmjj);
            inhaber = kunde;
            kontostand = 0;
            kontonummer = nummer;
            nummer += 1;
            kontostand += einzahlung;
            buchungen = new ArrayList<String>();
            buchungen.add(datum + "\nKontoeröffnung mit Einzahlung von: " + einzahlung + "€");
        }
    }
    //Kontoeröffnung (geworben) mit Einzahlung
    public Konto(int einzahlung, Inhaber kunde, Konto begünstigter, String ttmmjj)
    {
        Kalender(ttmmjj);
        inhaber = kunde;
        kontostand = 0;
        kontonummer = nummer;
        nummer += 1;
        begünstigter.einzahlen(60, ttmmjj);
        kontostand += einzahlung;
        buchungen = new ArrayList<String>();
        buchungen.add(datum + "\nKontoeröffnung mit Einzahlung von: " + einzahlung + "€");
    }
    
    //Holt sich das aktuelle Datum
    private void Kalender(String ttmmjj)
    {
       datum = ttmmjj;
       //String datum = "";
       //Calendar heute = Calendar.getInstance();
       //int aktJahr = heute.get(Calendar.YEAR);
       //int aktMonat = heute.get(Calendar.MONTH)+1;
       //int aktTag = heute.get(Calendar.DAY_OF_MONTH);
       //this.datum = (aktTag + "." + aktMonat + "." + aktJahr);
    }
    
    //Testen ob datum funktioniert
    public void datum()
    {
        System.out.println();
        System.out.println(datum);
    }
    
    /**
    *Um Kontoauszüge ab einem bestimmten Datum zu bekommen, geben sie ein Datum in folgendem Format ein: "t.m.jj"
    *Für alle Kontoauszüge geben Sie "" ein.
    **/
    public void Kontoauszug(String suchdatum)
    {
        int index = 0;
        if(suchdatum == "") {
            System.out.println("Hier soll er sich den Inhbaer holen");
            System.out.println("Konto-Nr: " + nummer);
            while(index < buchungen.size()) {
                String alles = buchungen.get(index);
                System.out.println(alles);
                System.out.println("-------------------------------");
                index++;
            }
        }
        else {
            System.out.println("Hier soll er sich den Inhbaer holen");
            System.out.println("Konto-Nr: " + nummer);
            boolean gefunden = false;
            while(index < buchungen.size() && !gefunden) {
                String datum = buchungen.get(index);
                if(datum.contains(suchdatum)) {
                    gefunden = true;
                }
                else {
                    index++;
                }
            }
            if(index < buchungen.size()) {
                while(index < buchungen.size()) {
                    String allesAbAatum = buchungen.get(index);
                    System.out.println(allesAbAatum);
                    System.out.println("-------------------------------");
                    index++;
                }
            }
            else {
                System.out.println("Sie haben am " + suchdatum + " und auch danach, keine Buchungen getätigt!");
            }
        }
        System.out.println("");
        System.out.println("Ihr aktueller Kontostand beträgt: " + kontostand + "€");
    }
    
    
    //Holt sich die Informationen aus der Klasse Inhaber
    public Inhaber getInhaber()
    {
        return inhaber;
    }
    
    //Methode Kontostand abfragen
    public int getKontostand()
    {
        return kontostand;
    }
    
    /**
    *Welchen Betrag möchten Sie einzahlen?
    **/
    public void einzahlen(int betrag, String ttmmjj)
    {
        if(betrag > 0) {
            Kalender(ttmmjj);
            kontostand += betrag;
            buchungen.add(datum +  "\nEinzahlung: " + betrag + "€");
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
    
    /**
    *Welchen Betrag möchten Sie abheben?
    **/
    public void abheben(int betrag, String ttmmjj)
    {
        if(betrag > 0) {
            Kalender(ttmmjj);
            kontostand -= betrag;
            buchungen.add(datum +  "\nAuszahlung: -" + betrag + "€");
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
    
    /**
    *Bitte tragen Sie das Konto des Empfängers und den Betrag ein, den Sie überweisen wollen!
    **/
    public void überweisen(Konto empfänger, int betrag, String ttmmjj)
    {
        if(betrag > 0) {
            abheben(betrag, ttmmjj);
            empfänger.einzahlen(betrag, ttmmjj);
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
    
    /**
     *Welchen Betrag möchten Sie auf Ihr Sparkonto überweisen?
     **/
    public void sparen(int sparbetrag, String ttmmjj)
    {
        if(sparbetrag > 0 && sparbetrag < kontostand) {
            Kalender(ttmmjj);
            buchungen.add(datum + "\nÜberweisung auf Sparkonto: -" + sparbetrag + "€");
            kontostand -= sparbetrag;
            Sparkonto.einzahlung(sparbetrag);
        }
        else {
            System.out.println("Kontodeckung nicht ausreichend, oder sie haben einen negativen Betrag eingegeben!");
        }
    }
}

Die Klasse Sparkonto:

Java:
public class Sparkonto
{
    private int Zinssatz;
    
    private int Zinszahlung;
    
    private int Sparzahlung;
    
    private int kontostand;
    
    public Sparkonto()
    {
        kontostand = 0;
        Zinssatz = 6;
        
    }
    
    public void einzahlung(int sparbetrag)
    {
        kontostand += sparbetrag;
        
    }
}

Vielen Dank
Grüße LeFlair
 

MoxxiManagarm

Top Contributor
Sparkonto ist eine Klasse, wenn du eine Methode von einer Klasse aufrufst, dann muss diese Methode statisch sein. Was du machen willst ist die Methode auf einem Objekt dieser Klasse aufzurufen. Dein Objekt heißt bei dir oben sparbetrag. Deine Benennungen sind insgesamt fragwürdig, zumal Variablen IMMER im lowerCamelase geschrieben werden sollen. Deine Klassenvariable sollte nicht sparbetrag, sondern sparkonto heißen, aufrufen willst du die Methode dann mit sparkonto.einzahlung(sparbetrag);

Weitere Hinweise:
- Auch Methoden werden mit lowerCamelCase benamst
- von Umlauten in Benennunen ist abzuraten
- RuntimeException ist zu generisch, besser Wahl wäre hier InvalidArgumentException, außerdem wäre es ggf. auch sinnvoll eine solche Exception in den Ein- und Auszahl Methoden zu werfen, anstatt einfach nur einen Text zu printen
- Die Konstruktoren haben viel duplizierten Code, du kannst auch Konstruktoren innerhalb eines anderen Konstruktors aufrufen um Codeduplikation zu sparen
- Bist du dir sicher, dass Kontostand ein int sein soll und nicht ein double?
 
Zuletzt bearbeitet:

LeFlair

Mitglied
Okay gucken ob ich das richtig verstanden habe:
Im Datenfeld meiner Klasse Konto erstelle ich über private Sparkonto sparkonto; ein Objekt in Klasse Sparkonto!?
Dann rufe ich mit sparkonto.einzahlung(sparbetrag); meine Methode aus Klasse Sparkonto auf und führe Konstruktoren und die Methode einzahlung aus und übergebe dieser den Parameter sparbetrag? Wann wird denn das Objekt in Klasse Sparkonto erstellt? Beim Methodenaufruf sparkonto.einzahlung(sparbetrag)?

Ich habe mein Code anhand deiner Hinweise nochmal überarbeitet! Magst du noch einmal drüber gucken und mir die fragwürdigen Sachen makieren?

vielen dank dir erstmal für die schnelle Antwort!
Edit: okay deine 2te bearbeitung habe ich zu spät gesehen!
 

MoxxiManagarm

Top Contributor
Ich habe mein Code anhand deiner Hinweise nochmal überarbeitet! Magst du noch einmal drüber gucken und mir die fragwürdigen Sachen makieren?
Klar, aber wo ist der Code?

Wann wird denn das Objekt in Klasse Sparkonto erstellt?
Da wo es sinnvoll ist, vermute mal im Konstruktor ist am sinnvollsten.

Was bedeudet eigentlich datum in Konto? Ist es das Eröffnungsdatum? Ist es das Datum der letzten Akivität? Was ist das?
 

LeFlair

Mitglied
Klar, aber wo ist der Code?
wollte erst deine Antwort abwarten.
Hier also der Code, dein 2ten Edit ist jetzt noch nicht berücksichtigt.

Java:
import java.util.Calendar;
import java.util.ArrayList;
/**
 * Beschreiben Sie hier die Klasse Konto.
 *
 * @author ()
 * @version (2.0)
 */
//Klasse
public class Konto
{
    //nummer bleibt erhalten und zählt hoch bei Konstruktoraufruf
    private static int nummer = 101000;
    //Kontonummer
    private int kontonummer;
    //Name des Inhabers
    private Inhaber inhaber;
    //Zugriffs Variable für Sparkonto
    private Sparkonto sparkonto;
    //Kontostand
    private int kontostand;
    
    private String datum;
    
    private Inhaber nutzer;
    
    private ArrayList<String> buchungen;
    
    //Kontoeröffnung
    public Konto(Inhaber kunde, String ttmmjj)
    {
        kalender(ttmmjj);
        inhaber = kunde;
        kontostand = 0;
        kontonummer = nummer;
        nummer += 1;
        buchungen = new ArrayList<String>();
        buchungen.add(datum + "\nKontoeröffnung");
    }
    //Kontoeröffnung mit Einzahlung
    public Konto(int einzahlung, Inhaber kunde, String ttmmjj)
    {
        if(einzahlung < 0) {
            throw new RuntimeException("Betrag muss Positiv sein!");
        }
        else {
            kalender(ttmmjj);
            inhaber = kunde;
            kontostand = 0;
            kontonummer = nummer;
            nummer += 1;
            kontostand += einzahlung;
            buchungen = new ArrayList<String>();
            buchungen.add(datum + "\nKontoeröffnung mit Einzahlung von: " + einzahlung + "€");
        }
    }
    //Kontoeröffnung (geworben) mit Einzahlung
    public Konto(int einzahlung, Inhaber kunde, Konto beguenstigter, String ttmmjj)
    {
        kalender(ttmmjj);
        inhaber = kunde;
        kontostand = 0;
        kontonummer = nummer;
        nummer += 1;
        beguenstigter.einzahlen(60, ttmmjj);
        kontostand += einzahlung;
        buchungen = new ArrayList<String>();
        buchungen.add(datum + "\nKontoeröffnung mit Einzahlung von: " + einzahlung + "€");
    }
    
    //Holt sich das aktuelle Datum
    private void kalender(String ttmmjj)
    {
       datum = ttmmjj;
       //String datum = "";
       //Calendar heute = Calendar.getInstance();
       //int aktJahr = heute.get(Calendar.YEAR);
       //int aktMonat = heute.get(Calendar.MONTH)+1;
       //int aktTag = heute.get(Calendar.DAY_OF_MONTH);
       //this.datum = (aktTag + "." + aktMonat + "." + aktJahr);
    }
    
    //Testen ob datum funktioniert
    public void datum()
    {
        System.out.println();
        System.out.println(datum);
    }
    
    /**
    *Um Kontoauszüge ab einem bestimmten Datum zu bekommen, geben sie ein Datum in folgendem Format ein: "t.m.jj"
    *Für alle Kontoauszüge geben Sie "" ein.
    **/
    public void kontoauszug(String suchdatum)
    {
        int index = 0;
        if(suchdatum == "") {
            System.out.println("Hier soll er sich den Inhbaer holen");
            System.out.println("Konto-Nr: " + nummer);
            while(index < buchungen.size()) {
                String alles = buchungen.get(index);
                System.out.println(alles);
                System.out.println("-------------------------------");
                index++;
            }
        }
        else {
            System.out.println("Hier soll er sich den Inhbaer holen");
            System.out.println("Konto-Nr: " + nummer);
            boolean gefunden = false;
            while(index < buchungen.size() && !gefunden) {
                String datum = buchungen.get(index);
                if(datum.contains(suchdatum)) {
                    gefunden = true;
                }
                else {
                    index++;
                }
            }
            if(index < buchungen.size()) {
                while(index < buchungen.size()) {
                    String allesAbAatum = buchungen.get(index);
                    System.out.println(allesAbAatum);
                    System.out.println("-------------------------------");
                    index++;
                }
            }
            else {
                System.out.println("Sie haben am " + suchdatum + " und auch danach, keine Buchungen getätigt!");
            }
        }
        System.out.println("");
        System.out.println("Ihr aktueller Kontostand beträgt: " + kontostand + "€");
    }
    
    
    //Holt sich die Informationen aus der Klasse Inhaber
    public Inhaber getInhaber()
    {
        return inhaber;
    }
    
    //Methode Kontostand abfragen
    public int getKontostand()
    {
        return kontostand;
    }
    
    /**
    *Welchen Betrag möchten Sie einzahlen?
    **/
    public void einzahlen(int betrag, String ttmmjj)
    {
        if(betrag > 0) {
            kalender(ttmmjj);
            kontostand += betrag;
            buchungen.add(datum +  "\nEinzahlung: " + betrag + "€");
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
    
    /**
    *Welchen Betrag möchten Sie abheben?
    **/
    public void abheben(int betrag, String ttmmjj)
    {
        if(betrag > 0) {
            kalender(ttmmjj);
            kontostand -= betrag;
            buchungen.add(datum +  "\nAuszahlung: -" + betrag + "€");
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
    
    /**
    *Bitte tragen Sie das Konto des Empfängers und den Betrag ein, den Sie überweisen wollen!
    **/
    public void ueberweisen(Konto empfaenger, int betrag, String ttmmjj)
    {
        if(betrag > 0) {
            abheben(betrag, ttmmjj);
            empfaenger.einzahlen(betrag, ttmmjj);
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
    
    /**
     *Welchen Betrag möchten Sie auf Ihr Sparkonto überweisen?
     **/
    public void sparen(int sparbetrag, String ttmmjj)
    {
        if(sparbetrag > 0 && sparbetrag < kontostand) {
            kalender(ttmmjj);
            buchungen.add(datum + "\nÜberweisung auf Sparkonto: -" + sparbetrag + "€");
            kontostand -= sparbetrag;
            sparkonto.einzahlung(sparbetrag);
        }
        else {
            System.out.println("Kontodeckung nicht ausreichend, oder sie haben einen negativen Betrag eingegeben!");
        }
    }
}
 

MoxxiManagarm

Top Contributor
Ok, hier weitere Anmerkungen (ich führe meine voherigen Kommentare nochmal mit auf):
- Kommentiere nur da wo sinnvoll. Viele Sachen sind durch gescheite Benennungen selbsterklärend und müssen nicht extra kommentiert werden, solche Kommentare können die Lesbarkeit deutlich verringern. So meine ich z.B. den Kommentar "Kontostand" über "private in kontostand"
- Ich halte es weiterhin für fragwürdig, dass die Kontostände vom Datentyp int sind. Damit kannst du nur ganze Zahlen darstellen, wie möchtest du dann die Zinsrechnung später darauf anwenden?
- RuntimeException --> InvalidArgumentException (siehe Kommentar oben)
- Codeduplizierung in Konstruktoren verringern (siehe Kommentar oben)
- Mir ist total unklar was datum in Konto ist (siehe Kommentar oben)
- Ich finde es noch etwas merkwürdig, dass Buchungen nur ein String sind. Wäre es nicht sinnvoll Buchungs-Objekte mit einer entsprechenden Klasse zu erzeugen?
- "nummer += 1" ist nicht falsch, gängiger wäre aber die "nummer++" Schreibweise
- "nutzer" ist bei dir unused, oder übersehe ich etwas?
- Variablen werden überlicher Weise mit der kleinst möglichen "Schablone" deklariert. Wenn du also z.B. die ArrayList nicht als solches zwingend refenzieren muss, dann reicht ein "private List<String> buchungen; buchungen = new ArrayList<>();" Außerdem kannst du den Typ beim Konstruktor weglassen. Wie eben gezeigt.
- Nachdem du die Exception wirfst kommt bei dir ein else. Das else ist überflüssig, da du mit der Exception ohnehin die Methode schon verlässt. Es ist nicht falsch, würde aber wieder die Lesbarkeit erhöhen und den Einzug verringern. In größeren Projekten gibt es manchmal so viele Einzüge, da ist man froh, wenn man sich einen Einzug sparen kann, damit der Code nicht erst so weit rechts im Lesebereich anfängt.
 

LeFlair

Mitglied
Ich antworte mal einfach von Oben nach unten.
-das mit denn Kommentaren sehen ich absolut ein, das ist noch im Aufbau daher hab ich noch nicht auf ich sag mal gutes aussehen geachtet
-stimmt! muss ich auf double ändern, das hängt wohl auch noch damit zusammen das ich Sparbuch heute erst eingepflegt habe.
-InvalidArgumentException werde ich ausprobieren. Hatte da mal im netzt zu gesucht.
-zu der Codeduplizierung: Also das was gleicher Code ist in eine extra Methode und diese dann aufrufen!? so wie ich das mit kalender() gemacht habe?

-in datum steht das aktuelle datum drinn und wird darüber in den Kontoauszug übertragen. Aktuell setzte ich es Manuell um die Suche im Kontoauszug testen zu können.
- Ich finde es noch etwas merkwürdig, dass Buchungen nur ein String sind. Wäre es nicht sinnvoll Buchungs-Objekte mit einer entsprechenden Klasse zu erzeugen?
Das hatte ich versucht, die Klasse gibt es auch noch, allerdings hatte ich Schwierigkeiten die Kontoauszüge abzurufen und mehr als 2 Arrays zu speichern. Die Fehler waren zum größten Teil Non-Static Fhler. die du mir ja jetzt erklärt hast. Werde das später nochmal probieren. Falls ich Schwierigkeiten habe melde ich mich.

-nummer++ werd ich umsetzten
-nutzer war wirklich unused. denke das waren noch Rückstände aus dem "altem" Code
- Variablen werden überlicher Weise mit der kleinst möglichen "Schablone" deklariert. Wenn du also z.B. die ArrayList nicht als solches zwingend refenzieren muss, dann reicht ein "private List<String> buchungen; buchungen = new ArrayList<>();" Außerdem kannst du den Typ beim Konstruktor weglassen. Wie eben gezeigt.
-Ja okay den Typen hatte ich für mich stehen gelassen fürs verständnis. Das ich Array einfach weglassen kann wusste ich nicht.

- habe das else entfernt. wusste ich auch nicht. Exception ist noch neuland für mich.


Danke dir für die Mühe
 

MoxxiManagarm

Top Contributor
Ich glaube du bist auf einem guten Weg, du scheinst die Anmerkungen gut aufzunehmen, was ein tolles Zeichen ist.

Mit dem Konstruktor ist das so gemeint:

Java:
class MyClass {
  private Object a, b, c;

  public MyClass(Object a, Object b) {
    this.a = a;
    this.b = b;
  }

  public MyClass(Object a, Object b, Object c) {
    this(a, b); // HIER
    this.c = c;
  }
}


Vermutlich meinst du IllegalArgumentException?

Upps! Ja meine ich...
 

LeFlair

Mitglied
Nachdem ich alles auf double gesetzt habe was mit dem Konto zu tun hat, bekomme ich nun diese Fehlermeldung:
In der Klasse Sparkonto habe ich auch alles auf double geändert.

1588684948721.png
 

LeFlair

Mitglied
- RuntimeException ist zu generisch, besser Wahl wäre hier InvalidArgumentException, außerdem wäre es ggf. auch sinnvoll eine solche Exception in den Ein- und Auszahl Methoden zu werfen, anstatt einfach nur einen Text zu printen

Magst du mir einmal erklären wieso das Sinnvoll wäre? Wie gesagt das ist Neuland für mich.
Es wird ja auch nichts ausgegeben sondern nur der Code gezeigt bei diesen Exceptions.
 

MoxxiManagarm

Top Contributor
Für dein Programm mag es erstmal egal sein, aber System.out erfordert die Konsole für die Ausgabe. Stell dir vor du möchtest später eine GUI um deinen Programmcode bauen, dann stehst du vor einer Herausforderung, wenn du es dann umbauen musst. Aus meiner persönlichen Sicht sollten System.out Ausgaben daher, wenn möglich, nur in der Schnittstelle erfolgen. Im einfachsten Fall ist das die main-Methode. Die main-Methode kann die Exception ja handlen und dann die Ausgabe übernehmen.
 

LeFlair

Mitglied
Aaah okay. Gut, das kommt bestimmt noch später auf mich zu.
Noch ne Frage: Wie mach ich das Double 2 Nachkommastellen ausgibt?
Ich habe mal versucht alle dein Anmerkungen umzusetzen. Habe alles was doppelt in den Methoden oder Konstruktoren genutzt wurde als Methode geschrieben und diese einfach aufgerufen.
Hier aktueller stand.
Jetzt versuch ich mal das mit den Buchungs-Objekten.
Java:
import java.util.Calendar;
import java.util.ArrayList;
/**
* Beschreiben Sie hier die Klasse Konto.
*
* @author ()
* @version (2.0)
*/
public class Konto
{
    //nummer bleibt erhalten und zählt hoch bei Konstruktoraufruf
    private static int nummer = 101000;
   
    private int kontonummer;
   
    private Inhaber inhaber;
    //Zugriffs Variable für Sparkonto
    private Sparkonto sparkonto;
   
    private double kontostand;
   
    private String datum;
   
    //private Inhaber nutzer;
   
    private ArrayList<String> buchungen;
   
    //Kontoeröffnung
    public Konto(Inhaber inhaber, String ttmmjj)
    {
        kalender(ttmmjj);
        kundeAnlegen(inhaber);
        buchungen = new ArrayList<>();
        buchungen.add(datum + "\nKontoeröffnung");
    }
    //Kontoeröffnung mit Einzahlung
    public Konto(double einzahlung, Inhaber inhaber, String ttmmjj)
    {
        if(einzahlung < 0) {
            throw new IllegalArgumentException("Betrag muss Positiv sein!");
        }
        kalender(ttmmjj);
        kundeAnlegen(inhaber);
        eröffnungEinzahlung(einzahlung);
    }
    //Kontoeröffnung (geworben) mit Einzahlung
    public Konto(double einzahlung, Inhaber inhaber, Konto beguenstigter, String ttmmjj)
    {
        kalender(ttmmjj);
        kundeAnlegen(inhaber);
        beguenstigter.einzahlen(60, ttmmjj);
        eröffnungEinzahlung(einzahlung);
    }
    //Für Konstruktoren mit Einzahlung
    private void eröffnungEinzahlung(double einzahlung)
    {
        kontostand += einzahlung;
        buchungen = new ArrayList<>();
        buchungen.add(datum + "\nKontoeröffnung mit Einzahlung von: " + einzahlung + "€");
    }
    //Benötigte Methode für alle Konstruktoren
    private void kundeAnlegen(Inhaber inhaber)
    {
        this.inhaber = inhaber;
        kontostand = 0;
        kontonummer = nummer;
        nummer ++;
    }
    //Holt sich das aktuelle Datum
    private void kalender(String ttmmjj)
    {
       datum = ttmmjj;
       //datum = "";
       //Calendar heute = Calendar.getInstance();
       //int aktJahr = heute.get(Calendar.YEAR);
       //int aktMonat = heute.get(Calendar.MONTH)+1;
       //int aktTag = heute.get(Calendar.DAY_OF_MONTH);
       //this.datum = (aktTag + "." + aktMonat + "." + aktJahr);
    }
    //Ausgelagerte Inhaber prints für Methode kontoauszug
    private void printInhaber()
    {
        System.out.println("Hier soll er sich den Inhbaer holen");
        System.out.println("Konto-Nr: " + nummer);
    }
    //Ausgelagerte Kontoauszug prints für Methode kontoauszug
    private void printKontoauszugKomplett(int index)
    {
        String alles = buchungen.get(index);
        System.out.println(alles);
        System.out.println("-------------------------------");
    }
   
    //Testen ob datum funktioniert
    public void datum()
    {
        System.out.println();
        System.out.println(datum);
    }
   
    /**
    *Um Kontoauszüge ab einem bestimmten Datum zu bekommen, geben sie ein Datum in folgendem Format ein: "t.m.jj"
    *Für alle Kontoauszüge geben Sie "" ein.
    **/
    public void kontoauszug(String suchdatum)
    {
        int index = 0;
        if(suchdatum == "") {
            printInhaber();
            while(index < buchungen.size()) {
                printKontoauszugKomplett(index);
                index++;
            }
        }
        else {
            printInhaber();
            boolean gefunden = false;
            while(index < buchungen.size() && !gefunden) {
                String datum = buchungen.get(index);
                if(datum.contains(suchdatum)) {
                    gefunden = true;
                }
                else {
                    index++;
                }
            }
            if(index < buchungen.size()) {
                while(index < buchungen.size()) {
                    printKontoauszugKomplett(index);
                    index++;
                }
            }
            else {
                System.out.println("Sie haben am " + suchdatum + " und auch danach, keine Buchungen getätigt!");
            }
        }
        System.out.println("");
        System.out.println("Ihr aktueller Kontostand beträgt: " + kontostand + "€");
    }
   
   
    //Holt sich die Informationen aus der Klasse Inhaber
    public Inhaber getInhaber()
    {
        return inhaber;
    }
   
    //Methode Kontostand abfragen
    public double getKontostand()
    {
        return kontostand;
    }
   
    /**
    *Welchen Betrag möchten Sie einzahlen?
    **/
    public void einzahlen(double betrag, String ttmmjj)
    {
        if(betrag > 0) {
            kalender(ttmmjj);
            kontostand += betrag;
            buchungen.add(datum +  "\nEinzahlung: " + betrag + "€");
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
   
    /**
    *Welchen Betrag möchten Sie abheben?
    **/
    public void abheben(double betrag, String ttmmjj)
    {
        if(betrag > 0) {
            kalender(ttmmjj);
            kontostand -= betrag;
            buchungen.add(datum +  "\nAuszahlung: -" + betrag + "€");
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
   
    /**
    *Bitte tragen Sie das Konto des Empfängers und den Betrag ein, den Sie überweisen wollen!
    **/
    public void ueberweisen(Konto empfaenger, double betrag, String ttmmjj)
    {
        if(betrag > 0) {
            abheben(betrag, ttmmjj);
            empfaenger.einzahlen(betrag, ttmmjj);
        }
        else {
            System.out.println("Betrag muss Positiv sein!");
        }
    }
   
    /**
     *Welchen Betrag möchten Sie auf Ihr Sparkonto überweisen?
     **/
    public void sparen(double sparbetrag, String ttmmjj)
    {
        if(sparbetrag > 0 && sparbetrag < kontostand) {
            kalender(ttmmjj);
            buchungen.add(datum + "\nÜberweisung auf Sparkonto: -" + sparbetrag + "€");
            kontostand -= sparbetrag;
            sparkonto.einzahlung(sparbetrag);
        }
        else {
            System.out.println("Kontodeckung nicht ausreichend, oder sie haben einen negativen Betrag eingegeben!");
        }
    }
}

Java:
import java.util.ArrayList;
public class Inhaber
{
    private String nachname;
   
    private String vorname;
   
    private String adresse;
   
    public Inhaber(String nachname, String vorname, String adresse)
    {
        this.nachname = nachname;
        this.vorname = vorname;
        this.adresse = adresse;
    }
 
}
 
Zuletzt bearbeitet:

MoxxiManagarm

Top Contributor
Noch ne Frage: Wie mach ich das Double 2 Nachkommastellen ausgibt?
Das schaffst du mit String format https://dzone.com/articles/java-string-format-examples

Ich finde dein Code hat sich schon deutlich verbessert!! Die ist in einer Methoden-Benennung wieder ein 'ö' reingerutscht.

Habe alles was doppelt in den Methoden oder Konstruktoren genutzt wurde als Methode geschrieben und diese einfach aufgerufen.
So meinte ich das nicht, aber ist erstmal in Ordnung.

Hier nochmal 2 Anmerkungen, es werden weniger Anmerkungen und die Anmerkungen sind weniger gewichtig ;-)

Java:
kontonummer = nummer++;
// statt
//kontonummer = nummer;
//nummer ++;

Java:
// nimm für diese Struktur eine for-Schleife!

int index = 0;
//...
            while(index < buchungen.size()) {
// ...
                index++;
 

LeFlair

Mitglied
Cool Danke!
Hab mir nochmal den Unterschied zwischen for und while Schleife durchgelesen und direkt die schleife geändert :D.
Jetzt werde ich mal Versuchen die Buchungen als eigene Klasse zu machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
T Static Fehler Java Basics - Anfänger-Themen 1
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
A OOP Fehler non-static method can not be[...] Java Basics - Anfänger-Themen 2
C Fehler: non-static method Java Basics - Anfänger-Themen 5
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
X Static char Problem Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben