Modellierung eines Bankkunden

1207

Aktives Mitglied
Hallo 🙂
ich habe ein Interface Customer gegeben:
Java:
public interface Customer {

    /**
     * returns the last name of the customer.
     * @return the last name of the customer.
     */
    String getLastname();

    /**
     * returns the unique customer number.
     * @return the unique customer number.
     */
    int getCustomerNumber();

}

Jetzt soll ich eine Klasse BankCostumer schreiben, die dieses Interface implementiert und ausserdem folgende Attribute eines Kunden verwalten soll: Kundennumer, Vorname, Nachname, Adresse und Geburtsdatum und für jedes dieser privaten Attribute soll es eine Getter- und Setter-Methode geben.

Das habe ich dazu gemacht:

Java:
import java.util.Scanner;

public class BankCustomer implements Customer{

    private String lastname;
    private String firstname;
    private int customerNumber;
    private String strasse;
    private String ort;
    private String geburtsdatum;

    public BankCustomer(String lastname,String firstname, int customerNumber,String strasse,String ort, String geburtsdatum){
        this.lastname = lastname;
        this.firstname = firstname;
        this.customerNumber = customerNumber;
        this.strasse = strasse;
        this.ort = ort;
        this.geburtsdatum = geburtsdatum;
    }

    public void setLastname(String lname){
        lastname = lname;
    }
    public String getLastname() {
        return lastname;
    }

    public void setFirstname(String fname){
        firstname = fname;
    }
    public String getFirstname() {
        return firstname;
    }

    public void setCustomerNumber(int number){
        customerNumber = number;
    }
    public int getCustomerNumber() {
        return customerNumber;
    }

    public void setStrasse(String stra){
        strasse = stra;
    }
    public String getStrasse() {
        return strasse;
    }

    public void setOrt(String wohnort){
        ort = wohnort;
    }
    public String getOrt() {
        return ort;
    }

    public void setGeburtsdatum(String gebDatum){
        geburtsdatum = gebDatum;
    }
    public String getGeburtsdatum() {
        return geburtsdatum;
    }


    public static void main(String[] args){

       BankCustomer eins = new BankCustomer( lastname ,firstname, customerNumber, strasse, ort, geburtsdatum);

        Scanner laname = new Scanner(System.in);
        System.out.print("Nachname bitte: ");
        String lastname = laname.next();
        eins.setLastname(lastname);

        Scanner firname = new Scanner(System.in);
        System.out.print("Vorname bitte: ");
        String firstname = firname.next();
        eins.setFirstname(firstname);

        Scanner number = new Scanner(System.in);
        System.out.print("Kundennummer bitte: ");
        String custNumber = number.next();
        int customerNumber = Integer.parseInt(custNumber);
        eins.setCustomerNumber(customerNumber);

        Scanner stras = new Scanner(System.in);
        System.out.print("Strasse und Hausnummer bitte: ");
        String strasse = stras.next();
        eins.setStrasse(strasse);

        Scanner wohnort = new Scanner(System.in);
        System.out.print("PLZ und Wohnort bitte: ");
        String ort = wohnort.next();
        eins.setOrt(ort);

        Scanner datum = new Scanner(System.in);
        System.out.print("Geburstadtum bitte: ");
        String gebDatum = datum.next();
        eins.setGeburtsdatum(gebDatum);

        System.out.println("Nachname: " + eins.getLastname());

    }
}

Aber jetzt habe ich das Problem, dass meine eingegebenen Daten nicht auf meinen BankCustomer eins gespeichert werden wollen und mir werden dafür folgende Fehler angezeigt:

66:java: non-static variable lastname cannot be referenced from a static context
66:java: non-static variable firstname cannot be referenced from a static context
66:java: non-static variable customerNumber cannot be referenced from a static context
66:java: non-static variable strasse cannot be referenced from a static context
66:java: non-static variable ort cannot be referenced from a static context
66:java: non-static variable geburtsdatum cannot be referenced from a static context

Woran liegt das?
 
Hallo,

du erzeugst den Bankkunden und übergibst die eigenen Instanzvariablen (auf die du außerhalb der Klasse natürlich keinen Zugriff hast) seinem Konstruktor. (Du setzt die Variablen quasi alle auf sich selbst) Das macht so keinen Sinn.
Entweder du schreibst einen neuen Konstruktor ohne Parameter, oder du erzeugst den Bankkunden erst am Ende der Main Methode und übergibst all die Strings, die du mit dem Scanner gesammelt hast.

lg Toto
 
Zuletzt bearbeitet:
Dankeschön!
Ich habe jetzt meine main-Methode so geändert:

Java:
public static void main(String[] args){


        Scanner s = new Scanner(System.in);

        System.out.print("Nachname bitte: ");
        String lastname = s.next();

        System.out.print("Vorname bitte: ");
        String firstname = s.next();

        System.out.print("Kundennummer bitte: ");
        int customerNumber = s.nextInt();

        System.out.print("Strasse und Hausnummer bitte: ");
        String strasse = s.next();

        System.out.print("PLZ und Wohnort bitte: ");
        String ort = s.next();

        System.out.print("Geburstadtum bitte: ");
        String gebDatum = s.next();

        s.close();



        BankCustomer eins = new BankCustomer( lastname ,firstname, customerNumber, strasse, ort, geburtsdatum);
        eins.setLastname(lastname);
        eins.setFirstname(firstname);
        eins.setCustomerNumber(customerNumber);
        eins.setStrasse(strasse);
        eins.setOrt(ort);
        eins.setGeburtsdatum(gebDatum);






        System.out.println("Nachname: " + eins.getLastname());

    }
}

und von lastname bis ort klappt's jetzt auch, aber für das Geburtsdatum wird mir wieder das hier angezeigt:
java: non-static variable geburtsdatum cannot be referenced from a static context

Das verstehe ich jetzt gar nicht, vom Prinzip ist das doch genau gleich wie bei denen davor?
 
Ich glaube, du musst diese Zeile
Java:
BankCustomer eins = new BankCustomer( lastname ,firstname, customerNumber, strasse, ort, geburtsdatum);
so ändern:
Java:
BankCustomer eins = new BankCustomer( lastname ,firstname, customerNumber, strasse, ort, gebDatum);

Weil du sonst "geburtsdatum", eine non-static Klassenvariable nutzt, und nicht die lokale Variable, in der die Eingabe des Users enthalten ist.
 
Java:
        BankCustomer eins = new BankCustomer( lastname ,firstname, customerNumber, strasse, ort, geburtsdatum);
        eins.setLastname(lastname);
        eins.setFirstname(firstname);
        eins.setCustomerNumber(customerNumber);
        eins.setStrasse(strasse);
        eins.setOrt(ort);
        eins.setGeburtsdatum(gebDatum);
geburtsdatum verwendest du immer noch. Außerdem ist das, einfach nur redundant. Wozu gibst du dem Konstruktor erst alle Werte und setzt diese dann noch einmal? Eines von beiden reicht.
 
Hey,

mach dir einmal klar, was der Konstruktor macht.
Die Werte die du dort übergibst sollen dazu dienen das Objekt "BankCustomer" zu initialisieren.

Wenn du ein Rechteck hast und dieses Rechteck hat als Instanzvariablen int laenge und int breite, dann kannst du einen Konstruktor schreiben mit den Parametern (int rLaenge, int rBreite) mit denen du das Rechteck direkt initialisieren kannst. Diesen rufst du dann so auf:

Rechteck rechteck = new Rechteck(2, 4);

Bei deinem Bankkunden kannst du also auch Daten wie Vorname, Nachname etc. direkt mitgeben. Der neue Bankkunde bekommt dann direkt diese Daten. Diese danach nochmal mit einem Setter zu setzen ist überflüssig. Das müsstest du nur, wenn du die Daten vorher nicht schon mit dem Konstruktor gesetzt hättest.
Also für das Rechteck Beispiel so:

Rechteck rechteck = new Rechteck();
rechteck.setLaenge(2);
rechteck.setBreite(4);

lg Toto
 

Neue Themen


Zurück
Oben