Zinsautomat

matthiasb

Mitglied
Hallo

Ich habe Probleme folgenden Code zum funktionieren zu kriegen. Ich arbeiten zurzeit daran an einen Zinsautomaten, mit insgesamt 3 Klassen. Leider funktioniert nicht der for-loop. Der Code sieht wie gefolgt aus:

Java:
public class Main {
	
	private double interest = 1.25;
	private double amount;
	private Keypad keypad;
	private int yourinput;
	
	public Main(int _amount){
		amount = _amount;
	}
	
	public double getInterestBalance(){
		for(int years=0; years < yourinput; years++){
			yourinput = keypad.getScanner();
			amount = amount * Math.pow(1 + interest, years);
			System.out.println("Year" + "\t" + "Total Amount");
			System.out.println(amount);
		}
		return amount;
	}
	
	public String toString(){
		String text = "Please enter a number" + getInterestBalance() + "\n";
			
		return text;
	}

Den Scanner hab ich in der Keypad Klasse geholt, und das Programm läuft durch mein Object in einer anderen Klasse.
Ich hoffe ihr könnt mein Problem verstehen. Bei Fragen, antworte ich so schnell wie es geht.

Danke im vorraus.

Gruß. :)
 
P

pappawinni

Gast
Wenn ich das richtig sehe, muss
Code:
yourinput
vor der Schleife eingelesen werden.

Java:
    public double getInterestBalance(){
        yourinput = keypad.getScanner();
        for(int years=0; years < yourinput; years++){
            amount = amount * Math.pow(1 + interest, years);
            System.out.println("Year" + "\t" + "Total Amount");
            System.out.println(amount);
        }
        return amount;
    }
 
M

Marcinek

Gast
Ist es klug in der toString() methode userabfragen zu machen?

Google mal,was diese methode ist
 

matthiasb

Mitglied
Ok hab den Code jetzt bisschen geändert, input vor dem loop eingesetzt und den toString entfernt. Den toString hab ich ursprünglich nur geschrieben weil ich nicht mehr weiterwusste :/.

Leider klappt das Programm immer noch nicht wie es soll.

Java:
private double interest = 1.25;
	private double amount;
	private Keypad keypad;
	private int yourinput;
	
	public Main(int _amount){
		amount = _amount;
	}
	
	public double getInterestBalance(){
		yourinput = keypad.getScanner();
		for(int years=0; years < yourinput; years++){
			amount = amount * Math.pow(1 + interest, years);
			System.out.println("Year" + "\t" + "Total Amount");
			System.out.println(amount);
		}
		return amount;

Der momentane Code zeigt nach dem laufen immer

Exception in thread "main" java.lang.NullPointerException
at interest.Main.getInterestBalance(Main.java:15)
at interest.Test.main(Test.java:9)


Was soll das heissen?
 

matthiasb

Mitglied
Ich weiss leider nciht was NPE ist. Ich bin total verwirrt.

Hier der Code von der Klasse Main
Java:
public class Main {
	
	private double interest = 1.25;
	private double amount;
	private Keypad keypad;
	private int yourinput;
	
	public Main(double _amount){
		amount = _amount;
	}
	
	public void setInterestBalance(double _amount){
		amount = _amount;
	}
	
	public double getInterestBalance(){
		
		yourinput = keypad.getScanner();
		for(int years=0; years < yourinput; years++){
			amount = amount * Math.pow(1 + interest, years);
			System.out.println("Year" + "\t" + "Total Amount");
			System.out.println(amount);
		}
		return amount;
		
	}
	

}

von Test:
Java:
public class Test {
	
	public static void main(String args[]){
		
		Main myMain = new Main(1000);
		
		System.out.println(myMain.getInterestBalance());

Und meinem scanner:

Java:
public class Keypad {
		
	private Scanner input;
	
	public Keypad(){
		Scanner input = new Scanner(System.in);
	}
	
	public int getScanner(){
		return input.nextInt();
	}

Ich hab wirklich keine ahnung was daran falsch ist.???:L :noe:
 
P

pappawinni

Gast
In deiner Klasse Main wird dem keypad kein Wert zugewiesen.
Versuch es da mal mit
Code:
    private Keypad keypad = new Keypad();
In deiner Klasse Keypad definierst du im Konstruktor einen neuen Scanner
Die Instanzvariable input bleibt ohne Zuweisung. Schreibe
Java:
    public Keypad(){
        input = new Scanner(System.in);
    }
Was du dann hier
Code:
amount = amount * Math.pow(1 + interest, years);
rechnest, versteh ich auch nicht.
Du potenzierst (1+1.25), also 2,25 mit 1, 2, 3.. bis zur Anzahl Jahren ... und multiplizierst das alles miteinander..
Hat das irgend einen geistigen Nährwert ?

Ich vermute, du wolltest da lediglich
Code:
amount = amount * interest;
rechnen
 
Zuletzt bearbeitet von einem Moderator:

matthiasb

Mitglied
Das hat sehr geholfen! Danke soweit! Die Berechnung ist einfach eine Berechnung des Zinses mit der allgemeinen Formel.

Denkst ihr ich kann da ein array reinpacken, dass ich links die Jahreszahl ausgedruckt kriege und dazu die endgültige Summe per Jahr?

Gruß
 
P

pappawinni

Gast
Ich weiss ja nicht, was dir dein Arzt oder Apotheker empfehlen würde, ich denke, dass dein Programm ziemlich konzeptlos ist.
Es sollte vielleicht eine Klasse "Kapital" (nicht Main) mit folgenden Daten geben:
Betrag, Zinssatz, (Anlagedauer)
Dazu sollte der Konstruktor der Klasse die Angabe dieser Daten fordern.
Darüberhinaus sollte es Settermethoden geben, die eine Änderung dieser Daten ermöglichen
und Gettermethoden für die Abfrage der Daten.
Dann sollte es mindestens eine weitere Methoden geben, wie zum Beispiel die Berechnung des Zinssalto.
Die Klasse Kapital hätte dabei weder einen Scanner zu benutzen, noch hätte sie Ausgaben auszführen.
Das Einlesen oder die Ausgabe von Daten wäre Sache der Main-Methode der übergeordneten Klasse, einer Verwaltung von Kapitalanlagen.. oder so.
 

Oben