Brauche Hilfe bei Objektorientiertem programmieren

Diskutiere Brauche Hilfe bei Objektorientiertem programmieren im Java Basics - Anfänger-Themen Bereich.
I

iTzjxn3s

Guten Tag,
die Woche hatten wir in der Schule mit Objektorientiertem programmieren angefangen, leider war ich krank sodass ich meine Frage nicht dem Lehrer stellen konnte.
Es wäre lieb wenn ihr mir ein paar Denkanstöße geben könntet und mir eventuell auch erklärt was ich falsch gemacht habe.

Hier die Aufgabenstellung:

  • Implementieren Sie die Klasse Sparbuch mit den Attributen kontonummer, kapital und zinssatz. Alle Attribute sollen private gesetzt werden.

  • Die Klasse Sparbuch soll folgende Methoden enthalten:

  • zahleEin: erhöht das Guthaben um einen bestimmten Betrag.
  • hebeAb: vermindert das Guthaben um einen bestimmten Betrag.
  • getErtrag: berechnet das Kapital mit Zins und Zinseszins nach einer vorge
  • gebenen Laufzeit.
  • verzinse: erhöht das Guthaben um den Jahreszins.
  • getKontonummer: liefert die Kontonummer.
  • getKapital: liefert das Guthaben.
  • getZinssatz: liefert den Zinssatz.


Testen Sie die Methoden die Klasse durch folgende Klasse:





public
class Test {



public static void main(String[] args) {



Sparbuch sb = new Sparbuch(4711, 1000, 3);



sb.zahleEin(60000);

System.out.println("Kapital: " + sb.getKapital());



System.out.println("Ertrag nach 6 Jahr: " + sb.getErtrag(6));



sb.verzinse();

System.out.println("Kapital: " + sb.getKapital());

}

}



Und hier mein Programm dazu

class Sparbuch {
private double kontonummer;
private double kapital;
private double zinssatz;
public double zahleEin(){
double einzahl =0.0 ;
kapital = kapital + einzahl ;

System.out.println("Es wurden " + einzahl + "€ eingezahlt!");
return kapital;
}
public double hebeAB(){
double auszahl =0.0;
kapital = kapital - auszahl;

System.out.println("Sie haben " +auszahl + "€ abgehoben!");
return kapital;
}
public double getErtrag(){
double ertrag;
ertrag = kapital * zinssatz;
System.out.println(ertrag);
return zinssatz;
}
public double vezinse(){
double verzinsung;
verzinsung = kapital * (zinssatz * 12);
System.out.println("Das ist ihr Umsatz mit Jahreszinsen: " + verzinsung);
return zinssatz;
}
private void getKontonummer(){
System.out.println(kontonummer);
}
private void getKaptial(){
System.out.println(kontonummer);
}
private void getZinssatz(){
System.out.println(kontonummer);
}
}

Folgende Fehler tauchen auf:
Test.java:47:19: error: constructor Sparbuch in class Sparbuch cannot be applied to given types;
 
Kirby_Sike

Kirby_Sike

Du hast keinen Konstruktor definiert ;) Der default Konstruktor hat keine Übergabeparameter
 
Kirby_Sike

Kirby_Sike

Naja du musst einen Konstruktor hinzufügen ;) Der müsste z.B. so aussehen:


Java:
public Sparbuch(int kontonummer){

}
Du musst nur darauf achten das der Konstruktor so viele Übergabeparameter hat wie du übergeben möchtest
 
I

iTzjxn3s

Naja du musst einen Konstruktor hinzufügen ;) Der müsste z.B. so aussehen:


Java:
public Sparbuch(int kontonummer){

}
Du musst nur darauf achten das der Konstruktor so viele Übergabeparameter hat wie du übergeben möchtest
public Sparbuch(double kapital, double zinssatz, int kontonummer)

Im Grunde so?
 
Kirby_Sike

Kirby_Sike

Ja und du musst die Werte nur noch deinen Instanzvariablen zuweisen ;) Da du den gleichen Namen wie deine Instanzvariablen gewählt hast musst du this.VariablenName benutzen, da deine Instanzvariablen verdeckt werden.

Also muss es so aussehen:


Java:
public Sparbuch(double kapital, double zinssatz, int kontonummer){
      this.kapital = kapital;
      this.zinssatz = zinssatz;
      this.kontonummer = kontonummer;
}
 
I

iTzjxn3s

Haut immer noch nicht hin 😖, gleicher fehler wie davor

class Sparbuch {
private int kontonummer;
private double kapital;
private double zinssatz;
public Sparbuch(double kapital, double zinssatz, int kontonummer){
this.kapital = kapital;
this.zinssatz = zinssatz;
this.kontonummer = kontonummer;
}

public double zahleEin(){
double einzahl =0;
kapital = kapital + einzahl ;

System.out.println("Es wurden " + einzahl + "€ eingezahlt!");
return kapital;
}
public double hebeAB(){
double auszahl = 0;
kapital = kapital - auszahl;

System.out.println("Sie haben " +auszahl + "€ abgehoben!");
return kapital;
}
public double getErtrag(){
double ertrag;
ertrag = kapital * zinssatz;
System.out.println(ertrag);
return zinssatz;
}
public double vezinse(){
double verzinsung;
verzinsung = kapital * (zinssatz * 12);
System.out.println("Das ist ihr Umsatz mit Jahreszinsen: " + verzinsung);
return zinssatz;
}
private void getKontonummer(){
System.out.println(kontonummer);
}
private void getKaptial(){
System.out.println(kontonummer);
}
private void getZinssatz(){
System.out.println(kontonummer);
}
}

public class Test {

public static void main(String[] args) {

Sparbuch sb = new Sparbuch(4711, 1000, 3);

sb.zahleEin(60000);
System.out.println("Kapital: " + sb.getKapital());

System.out.println("Ertrag nach 6 Jahr: " + sb.getErtrag(6));

sb.verzinse();
System.out.println("Kapital: " + sb.getKapital());
}
}



Fehler
Test.java:56:7: error: method zahleEin in class Sparbuch cannot be applied to given types;
 
Kirby_Sike

Kirby_Sike

Schick mal bitte deinen Code in Code Tags (Die drei Punkte und dann auf Code) und dann die exakte Fehlermeldung
 
I

iTzjxn3s

Code:
import java.util.Scanner;

 class Sparbuch {
  private int kontonummer;
  private double kapital;
  private double zinssatz;
  public Sparbuch(double kapital, double zinssatz, int kontonummer){
     this.kapital = kapital;
      this.zinssatz = zinssatz;
      this.kontonummer = kontonummer;
   }

    public double zahleEin(){
    double einzahl =0;
    kapital = kapital + einzahl   ;
    
    System.out.println("Es wurden " + einzahl + "€ eingezahlt!");
    return kapital;
    }
    public double hebeAB(){
     double auszahl = 0;
     kapital = kapital - auszahl;
    
    System.out.println("Sie haben " +auszahl + "€ abgehoben!");
    return kapital;
    }
  public double getErtrag(){
     double ertrag;
    ertrag = kapital * zinssatz;
    System.out.println(ertrag);
    return zinssatz;
    }
   public double vezinse(){
    double verzinsung;
    verzinsung = kapital * (zinssatz * 12);
    System.out.println("Das ist ihr Umsatz mit Jahreszinsen:  " + verzinsung);
    return zinssatz;
    }
  private void getKontonummer(){
    System.out.println(kontonummer);
    }
   private void getKaptial(){
    System.out.println(kontonummer);
  }
   private void getZinssatz(){
    System.out.println(kontonummer);
  }
  }
    
  public  class Test {

  public static void main(String[] args) {
    
   Sparbuch sb = new Sparbuch(4711, 1000, 3);

    sb.zahleEin(60000);
    System.out.println("Kapital: " + sb.getKapital());

    System.out.println("Ertrag nach 6 Jahr: " + sb.getErtrag(6));

    sb.verzinse();
    System.out.println("Kapital: " + sb.getKapital());
  }
  }


Hier mal die komplette Fehlermeldung


Fehler


Test.java:56:7: error: method zahleEin in class Sparbuch cannot be applied to given types;
sb.zahleEin(60000);
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length
Test.java:57:40: error: cannot find symbol
System.out.println("Kapital: " + sb.getKapital());
^
symbol: method getKapital()
location: variable sb of type Sparbuch
Test.java:59:51: error: method getErtrag in class Sparbuch cannot be applied to given types;
System.out.println("Ertrag nach 6 Jahr: " + sb.getErtrag(6));
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length
Test.java:61:7: error: cannot find symbol
sb.verzinse();
^
symbol: method verzinse()
location: variable sb of type Sparbuch
Test.java:62:40: error: cannot find symbol
System.out.println("Kapital: " + sb.getKapital());
^
symbol: method getKapital()
location: variable sb of type Sparbuch
5 errors
 
Kirby_Sike

Kirby_Sike

Also über denke mal deine Methoden...So wie die im Moment da stehen sind die Schwachsinn ;)

Deine zahleEin() Methode muss folgende Dinge erfüllen:
- Einzuzahlendes Geld als Parameter
- Geld auf die Variable Kontostand addieren

Also so:



Java:
public void zahleEin(int geld){
     kontostand += geld;
     System.out.println("Dein Geld wurde erfolgreich eingezahlt! Dein Kontostand beträgt nun " + kontostand + "€");
}
Du kannst keinen Outstream auf einen String concatenieren bei getKapital()
 
Kirby_Sike

Kirby_Sike

Was ich dir anbieten kann ist nachher deinen Code so umzuschreiben, dass er funktioniert und sinnvoll ist. Ich werde dann jede Zeile kommentieren und dir versuchen zu erklären warum es so sinnvoll ist
 
I

iTzjxn3s

Was ich dir anbieten kann ist nachher deinen Code so umzuschreiben, dass er funktioniert und sinnvoll ist. Ich werde dann jede Zeile kommentieren und dir versuchen zu erklären warum es so sinnvoll ist
Das wäre wirklich sehr nett von ihnen. Ich bin dabei nämlich teilweise echt überfragt, ich habe jetzt eingesehen dass statt double bei den Methoden void stehen muss, allerdings bin ich noch nicht weiter gekommen....
 
Kirby_Sike

Kirby_Sike

Also nur mal so ein Tipp:

Wenn eine Methode nur etwas setzen soll (also eine Setter Methode ist), dann ist diese entweder void oder boolean ;)
 
Dompteur

Dompteur

2 deiner Fehler passieren, weil du dich beim Methodennamen vertippt hast.
Hier der erste Fall.

Code:
Test.java:57:40: error: cannot find symbol
   System.out.println("Kapital: " + sb.getKapital());
 symbol:   method getKapital()
 location: variable sb of type Sparbuch
Auch wenn die Fehlermeldungen am Anfang verwirrend wirken mögen, ist es wichtig, sie lesen zu lernen.
 
Kirby_Sike

Kirby_Sike

Java:
import java.util.Scanner;

 class Sparbuch {
  
    private int kontonummer;
    private double kapital;
    private double zinssatz;
  
    public Sparbuch(double kapital, double zinssatz, int kontonummer){
       this.kapital = kapital;
       this.zinssatz = zinssatz;
       this.kontonummer = kontonummer;
    }

    public void einzahlen(double wert){
       kapital += wert;
       System.out.println("Es wurden " + wert + "€ eingezahlt!");
    }
  
    public double auszahlen(double wert){
      kapital -= wert;
      System.out.println("Sie haben " + wert + "€ abgehoben!");
      return wert;
   }
 
   public double getErtrag(){   //Keine Ahnung ob du den Wert gerne speichern möchtest
      return kapital * zinssatz;
   }
  
   public void vezinse(){  //Keine Ahnung ob du den Wert gerne speichern möchtest
      double verzinsung = kapital * (zinssatz * 12);
      System.out.println("Das ist ihr Umsatz mit Jahreszinsen:  " + verzinsung);
   }
  
   private int getKontonummer(){
       return kontonummer;
   }
  
   private double getKapital(){
      return kapital;
   }
  
   private double getZinssatz(){
      return zinssatz;
   }
}
    
  public  class Test {

  public static void main(String[] args) {
    
   Sparbuch sb = new Sparbuch(4711, 1000, 3);

   sb.einzahlen(60000);
   System.out.println("Kapital: " + sb.getKapital());

   System.out.println("Ertrag nach 6 Jahr: " + sb.getErtrag(6));

   sb.verzinse();
   System.out.println("Kapital: " + sb.getKapital());
  }
}
 
M

M.L.

...und man sollte den Code nicht nur posten, sondern auch mittels Compiler auf Fehler überprüfen. Z.B. sorgt das Schlüsselwort "private" nur für Sichtbarkeit innerhalb der Originalklasse: https://www.javatutorial.de/w/Modifikator-Typen. Aber eine kleine Modifikation des letzten Vorschlags:
Code:
/*private*/ public double getKapital(){
    return kapital;
}
(überall private auskommentieren und stattdessen public nehmen), die Methode "getErtrag" mit einem Parameter versehen und ve_r_zinse() richtig schreiben führt zu folgendem vorläufigem Ergebnis:
Code:
Es wurden 60000.0€ eingezahlt!
Kapital: 64711.0
Ertrag nach 6 Jahr: 6.4711E7
Das ist ihr Umsatz mit Jahreszinsen:  7.76532E8
Kapital: 64711.0

Process finished with exit code 0
 
T

temi

Dein Code kommentiert:
Java:
class Sparbuch {
    private int kontonummer;
    private double kapital;
    private double zinssatz;
   
    public Sparbuch(double kapital, double zinssatz, int kontonummer){
        this.kapital = kapital;
        this.zinssatz = zinssatz;
        this.kontonummer = kontonummer;
    }

    // hier fehlt ein passender Parameter der Methode, nämlich der Betrag,
    // der eingezahlt werden soll
    public double zahleEin(){
        double einzahl =0; // das brauchts du dann nicht mehr
        kapital = kapital + einzahl ;

        System.out.println("Es wurden " + einzahl + "€ eingezahlt!");
        return kapital;
    }

    // genau das gleiche hier: Parameter für den Einzahlbetrag
    public double hebeAB(){
        double auszahl = 0; // unnötig
        kapital = kapital - auszahl;

        System.out.println("Sie haben " +auszahl + "€ abgehoben!");
        return kapital;
    }
   
    public double getErtrag(){
        double ertrag;
        ertrag = kapital * zinssatz;
        System.out.println(ertrag);
        return zinssatz;
    }
   
    public double vezinse(){
        double verzinsung;
        verzinsung = kapital * (zinssatz * 12);
        System.out.println("Das ist ihr Umsatz mit Jahreszinsen: " + verzinsung);
        return zinssatz;
    }
   
    // Methoden, die mit "get" beginnen sollen meist einen Wert zurückgeben
    // Rückgabetyp "void" kann demnach nicht ganz richtig sein
    // Da die Methode "private" ist, kannst du allerdings nicht von außerhalb der Klasse
    // darauf zugreifen
    private void getKontonummer(){
        System.out.println(kontonummer);
        // dann musst du natürlich auch was zurückgeben
    }
   
    // wie darüber
    private void getKaptial(){
        System.out.println(kontonummer);
    }
   
    // wie darüber
    private void getZinssatz(){
        System.out.println(kontonummer);
    }
}
 
T

temi

Leider hatten sich noch zwei Fehler eingschlichen:
Java:
class Sparbuch {
    private int kontonummer;
    private double kapital;
    private double zinssatz;

    public Sparbuch(double kapital, double zinssatz, int kontonummer){
        this.kapital = kapital;
        this.zinssatz = zinssatz;
        this.kontonummer = kontonummer;
    }

    // hier fehlt ein passender Parameter der Methode, nämlich der Betrag,
    // der eingezahlt werden soll
    public double zahleEin(){
        double einzahl =0; // das brauchts du dann nicht mehr
        kapital = kapital + einzahl ;

        // GENERELL für alle Methoden hier: Ausgaben sollten hier nicht vorgenommen werden,
        // das ist die Aufgabe der Klasse, die diese Methode aufruft.
        // In der Test-Main werden diese Ausgaben ja auch gemacht
        System.out.println("Es wurden " + einzahl + "€ eingezahlt!");
        return kapital;
    }

    // genau das gleiche hier: Parameter für den Auszahlbetrag
    public double hebeAB(){
        double auszahl = 0; // unnötig
        kapital = kapital - auszahl;

        System.out.println("Sie haben " +auszahl + "€ abgehoben!");
        return kapital;
    }

    // hier fehlt der geforderte Parameter für die Laufzeit!
    public double getErtrag(){
        double ertrag;
        ertrag = kapital * zinssatz;
        System.out.println(ertrag);
        return zinssatz;
    }

    public double vezinse(){
        double verzinsung;
        verzinsung = kapital * (zinssatz * 12);
        System.out.println("Das ist ihr Umsatz mit Jahreszinsen: " + verzinsung);
        return zinssatz;
    }

    // Methoden, die mit "get" beginnen sollen meist einen Wert zurückgeben
    // Rückgabetyp "void" kann demnach nicht ganz richtig sein
    // Da die Methode "private" ist, kannst du allerdings nicht von außerhalb der Klasse
    // darauf zugreifen
    private void getKontonummer(){
        System.out.println(kontonummer);
        // dann musst du natürlich auch was zurückgeben
    }

    // wie darüber
    private void getKaptial(){
        System.out.println(kontonummer);
    }

    // wie darüber
    private void getZinssatz(){
        System.out.println(kontonummer);
    }
}
 
Thema: 

Brauche Hilfe bei Objektorientiertem programmieren

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben