Setter/Getter Array

Maxm123

Erfahrenes Mitglied
Hallochen, ich habe die Woche begonnem mich mit Java zu beschäftigen. Wir sollen vom Studium aus einen Taschenrechner programmieren.

Ich habe hier ein kleinen Problem mit dem set und get eines Array's. Ich finde aber leider meinen Denkfehler nicht.

Code:
Rechnung meineRechnung = new Rechnung();

Mit:
Code:
meineRechnung.setZahlen(Float.parseFloat(jTextField1.getText()), meineRechnung.getStep());

Möchte ich eine Zahl aus dem Taschenrechner an meine Klasse "Rechnung" übergeben.

Code:
public class Rechnung {
    private float Zahlen[];
    private int step = 0;

    public float getZahlen(int step) {
        return Zahlen[step];
    }

    public void setZahlen(float Zahlen, int step) {
        this.Zahlen[step] = Zahlen;
    }

    public int getStep() {
        return step;
    }

    public void setStep(int step) {
        this.step = step;
    }
    
}

Es kommt aber immer der Fehler:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at taschenrechner.Rechnung.setZahlen(Rechnung.java:21)
	at taschenrechner.JFrameTaschenrechber.jButtonPlusActionPerformed(JFrameTaschenrechber.java:483)
	at taschenrechner.JFrameTaschenrechber.access$1100(JFrameTaschenrechber.java:14)
	at taschenrechner.JFrameTaschenrechber$12.actionPerformed(JFrameTaschenrechber.java:158)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:688)
	at java.awt.EventQueue$3.run(EventQueue.java:686)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:702)
	at java.awt.EventQueue$4.run(EventQueue.java:700)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Ich gehe mal davon aus das der Fehler in der Zeile liegt:
Code:
at taschenrechner.Rechnung.setZahlen(Rechnung.java:21)

das wäre dann die hier:
Code:
this.Zahlen[step] = Zahlen;

Frage ist nun. Was ist daran falsch?
 

sheel

I love Asm
Hi

die genannten Zeilen selbst sind in Ordnung,
allerdings hast du das Array Zahlen (this.Zahlen) nirgends angelegt.

Es wurde zwar gesagt, dass Zahlen ein Array aus floats ist,
aber nirgends die Anzahl der floats angegeben.
Daher gibt es noch überhaupt nichts Konkretes, das Werte aufnehmen kann
(ein Array muss immer eine fixe Größe haben).

Für 10 floats zB.so:
Java:
this.Zahlen = new float[10];
Damits beim Anlegen von Rechnung automatisch gemacht wird, in einen Konstruktor:
Java:
public Rechnung() {
    this.Zahlen = new float[10];
}

Falls beliebig viel Elemente benötigt sind (und man die Anzahl beim Anlegen noch nicht weiß)
eher eine List verwenden.