StackOverflowError

ashi

Mitglied
Hi! Ich hatte einen funktionierenden Code aber irgendwie wurde eben erst nichts mehr und dann nur noch StackOverflowError ausgegeben. Der Error geht weg wenn ich aus meiner main Zeile 11 lösch aber dann greift sie ja nicht auf Konto zu und somit passiert nichts nehm ich an? Bin total verwirrt grade würde mich freuen wenn mir da jemand weiterhelfen könnte..
help.jpg
Java:
package aufgaben;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        Konto konto = new Konto();

    }

}
Java:
package aufgaben;

import java.util.Scanner;

public class Konto {
    Scanner scan = new Scanner(System.in);
    
    Konto konto = new Konto();
    
    String besitzer;
    double kontostand;
    
   Konto(){
        System.out.println("Inhaber?");
        this.besitzer = scan.nextLine();
        System.out.println("Kontostand?");
        this.kontostand = scan.nextDouble();
        
        System.out.printf("Inhaber ist %s, der aktuelle Kontostand beträgt %.2f", besitzer, kontostand);
        System.out.println("");
                    
        }
    public void einzahlen() {
        System.out.println("Wie viel möchten Sie einzahlen?:");
        double einzahlung = scan.nextDouble();
        this.kontostand += einzahlung;
        System.out.printf("Der neue Kontostand beträgt: %.2f", kontostand);
            
    }
}
 

LimDul

Top Contributor
Zeile 8 des zweiten Codes ist eine Endlos-Rekursion.

Du sagst ein Konto hat als Member ein Konto, das direkt erzeugt wird.

Das heißt, du erzeugt in deinem Programm in Zeile 11 ein Konto-Objekt.
Das braucht dann ein Konto-Objekt als Member-Variable.
Also wird ein weiteres Konto-Objekt erzeugt
Das braucht dann ein Konto-Objekt als Member-Variable.
Also wird ein weiteres Konto-Objekt erzeugt
....

Die Member Variable sieht schlicht falsch aus und gehört da vermutlich nicht hin.
 

ashi

Mitglied
Zeile 8 des zweiten Codes ist eine Endlos-Rekursion.

Du sagst ein Konto hat als Member ein Konto, das direkt erzeugt wird.

Das heißt, du erzeugt in deinem Programm in Zeile 11 ein Konto-Objekt.
Das braucht dann ein Konto-Objekt als Member-Variable.
Also wird ein weiteres Konto-Objekt erzeugt
Das braucht dann ein Konto-Objekt als Member-Variable.
Also wird ein weiteres Konto-Objekt erzeugt
....

Die Member Variable sieht schlicht falsch aus und gehört da vermutlich nicht hin.
Tatsache habs gelöscht jetzt gehts, vielen Dank! :)
 

Neumi5694

Top Contributor
Edit: Sorry, hab nicht gesehen, dass dein Konto Eingaben verwendet, deshalb der Scanner.

Das solltest du aber bitte auslagern. Ein Konto ist eine Ansammlung von Daten. Logik gehört da nicht rein. Spätestens, wenn du anstatt der Konsoleneingabe ein GUI verwenden willst, wird dir klar sein, warum.

Tip:
1. Datenmüll vermeiden, dein Konto braucht wohl keinen Scanner :)
Java:
public class Konto {
    Scanner scan = new Scanner(System.in);
    ...

2. deine Konto-Klassenvariablen sind nicht private, sollten sie aber sein. Von außen soll darauf nur über bereitgestellte Methoden zugegriffen werden können.
2.1 Zu diesem Zweck erstelle zumindest mal Getter, um die Werte abfragen zu können. Ein Setter für den Besitzer wäre auch nicht schlecht. Überlege dir bei der Gelegenheit, was du tun willst, falls jemand null als Besitzer übergibt.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben