Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Moin,
leider weis ich nicht wie ich folgendens Problem lösen soll.
Hier ein Teilauszug aus meiner Klasse Konto. Es geht um die Methode einzahlen. Diese soll auch in meiner 2ten Klasse Kontoauszug eine Methode öffnen die den Array in der Liste ablegt. Jedoch erzeuge ich ja durch das new jedes mal ein neues objekt sodass ich die alte array liste nicht fortführe. Ich kann aber die Methode in der anderen klasse nicht direkt aufrufen, weil ich dann einen non-static method cannot be referenced from a static context Fehler bekomme.
Ich versteh einfach nicht wie ich das Problem lösen kann.
Java:
//Konstruktor Standard
public Konto(Inhaber kunde)
{
inhaber = kunde;
kontostand = 0;
kontonummer = nummer;
nummer += 1;
buchungen = new Kontoauszug();
}
//Methode Einzahlung tätigen
public void einzahlen(int betrag)
{
if(betrag > 0) {
kontostand += betrag;
buchungen.Einzahlung (betrag);
Kontoauszug buchungen = new Kontoauszug(betrag);
}
else {
System.out.println("Betrag muss Positiv sein!");
}
}
Hier ein Auszug aus der 2te Klasse mit der zu aufrufenden Methode
Java:
public void Einzahlung(int betrag)
{
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);
buchungen.add(aktTag + "." + aktMonat + "." + aktJahr + "\nEinzahlung: " + betrag + "€");
}
Ich hoffe ihr versteht wo ich festhänge und könnt mir Tipps in die richtige Richtung geben.
Ich denke erstelle die ArrayList in der 1sten Klasse und greife nur auf das Datum zurück welches über der 2ten klasse geholt wird.
Das sollte das Problem am einfachsten lösen denke ich
Also ich verstehe noch nicht dein genaues Problem. Kannst Du die Klassen nicht einmal ganz zeigen und genau schreiben, wo das Problem ist?
Kontoauszug hat ja eine Einzahlung Methode, die Du in Konto.einzahlen auch aufrufst.
(Methoden bitte mit einem kleinen Buchstaben starten und immer mit Verb!)
Das Kontoauszug buchungen = new Kontoauszug(betrag); ist natürlich erst einmal sinnlos. Was genau willst Du erreichen und wo rufst Du genau etwas auf wo Du den Fehler "non-static method cannot be referenced from a static context " bekommst?
Bei Dir ist nichts statisches zu sehen ...
Also ich hab jetzt alles in eine Klasse geschrieben und es funktioniert wie es soll.
Aber trotzdem würde ich gerne den Fehler verstehen.
Hier alte Klasse (mit Fehler) Konto.
Java:
//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;
//Kontostand
private int kontostand;
//Kontoeröffnung
public Konto(Inhaber kunde)
{
inhaber = kunde;
kontostand = 0;
kontonummer = nummer;
nummer += 1;
buchungen = new Kontoauszug();
}
//Kontoeröffnung mit Einzahlung
public Konto(int einzahlung, Inhaber kunde)
{
if(einzahlung < 0) {
throw new RuntimeException("Betrag muss Positiv sein!");
}
else {
Kalender();
inhaber = kunde;
kontostand = 0;
kontonummer = nummer;
nummer += 1;
kontostand += einzahlung;
buchungen = new Kontoauszug(einzahlung);
Kontoauszug buchungen = new Kontoauszug(betrag);
}
}
public void einzahlen(int betrag)
{
if(betrag > 0) {
kontostand += betrag;
buchungen.Einzahlung (betrag);
Kontoauszug.Einzahlung(betrag);
}
else {
System.out.println("Betrag muss Positiv sein!");
}
}
Hier die Klasse Kontoauszug auf die ich zugreife:
Java:
import java.util.Calendar;
import java.util.ArrayList;
public class Kontoauszug
{
private ArrayList<String> buchungen;
//Kontoauszug Kontoeröffnung
public Kontoauszug()
{
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);
buchungen = new ArrayList<String>();
buchungen.add(aktTag + "." + aktMonat + "." + aktJahr + "\nKontoeröffnung");
}
public Kontoauszug(int einzahlung)
{
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);
buchungen = new ArrayList<String>();
buchungen.add(aktTag + "." + aktMonat + "." + aktJahr + "\nKontoeröffnung mit Einzahlung von: " + einzahlung + "€");
}
public void Einzahlung(int betrag)
{
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);
buchungen.add(aktTag + "." + aktMonat + "." + aktJahr + "\nEinzahlung: " + betrag + "€");
}
public void KontoauszügeKomplett()
{
int index = 0;
while(index < buchungen.size()) {
String alles = buchungen.get(index);
System.out.println(alles);
index++;
}
}
}
Bei dieser Version hatte ich noch das Problem, das er 2 Arrays (Kontoauszüge) erstellt hat, aber mehr nicht. Wenn ich Methode einzahlen nochmal aufgerufen habe um wieder was einzuzahlen wurde kein weiterer Array in die Liste zugefügt.