Java 双数组丢失其信息

Java 双数组丢失其信息,java,arrays,swing,Java,Arrays,Swing,我正在为我的类编写一个带有swing组件的小程序,在双数组中存储信息时遇到了问题。该程序完全按照我的要求运行,只有一个例外:我通过“public double[]noten;”在actionlisteners的私有方法之外声明一个数组。但是,数组是在私有方法内部启动的 [...] public double summe, notenschnitt; public int i, anzahlnoten, besteNote, schlechtesteNote; public double [] n

我正在为我的类编写一个带有swing组件的小程序,在双数组中存储信息时遇到了问题。该程序完全按照我的要求运行,只有一个例外:我通过“public double[]noten;”在actionlisteners的私有方法之外声明一个数组。但是,数组是在私有方法内部启动的

[...]
public double summe, notenschnitt;
public int i, anzahlnoten, besteNote, schlechtesteNote;
public double [] noten;


private void jBÜbernehmen2ActionPerformed(java.awt.event.ActionEvent evt) {                                              

        if(!jTAnzahlNoten.getText().equals("") && Double.parseDouble(jTAnzahlNoten.getText())>=1 
           && Double.parseDouble(jTAnzahlNoten.getText())<=5){

            i++; //Counts clicks

            DecimalFormat f = new DecimalFormat("#0.00");

            summe = summe + Double.parseDouble(jTNote.getText()); //sum for calculating the mean

            anzahlnoten = Integer.parseInt(jTAnzahlNoten.getText()); //amount of grades

            noten = new double[anzahlnoten];
            noten[i-1] = Double.parseDouble(jTNote.getText());


            jLANoten.setText("Noten: ");
            jLANoten.setVisible(true);


            for(double ae: noten){
               jLANoten.setText(jLANoten.getText()+" "+ae);
            }

            notenschnitt = summe / i;

            jLBN.setVisible(true);
            jLNN.setVisible(true);
            jLSN.setVisible(true);
            jLNA.setVisible(true);

            jLNN.setText(f.format(notenschnitt));
            jLNA.setText(Integer.toString(i));
            jLNote.setText(i+". Note");

            if(Integer.parseInt(jTNote.getText()) < besteNote){
                //gets the best grade
                besteNote=Integer.parseInt(jTNote.getText());
                jLBN.setText(Integer.toString(besteNote));
            }

            if(Integer.parseInt(jTNote.getText()) > schlechtesteNote){ 
                //gets the worst grade
                schlechtesteNote=Integer.parseInt(jTNote.getText());
                jLSN.setText(Integer.toString(schlechtesteNote));
            }

            if (i >= Integer.parseInt(jTAnzahlNoten.getText())) { 
                //if clicks = amount of grades -> stop

                jBÜbernehmen2.setVisible(false);
                jBNeueBerechnung.setVisible(true);
                jTNote.setBackground(Color.LIGHT_GRAY);
                jTNote.setFocusable(false);
            }else{
                jTNote.requestFocus();
                jTNote.setText("");
            }

        }


    }
[...]
[…]
公共双总和,notenschnitt;
公共国际、安扎尔诺坦、贝斯特诺特、施莱赫特斯特诺特;
公共双[]注;
私有void jBÜbernehmen2ActionPerformed(java.awt.event.ActionEvent evt){
如果(!jtanzahlnote.getText().equals(“”)&&Double.parseDouble(jtanzahlnote.getText())>=1
&&Double.parseDouble(jtanzahlnote.getText())schlechtesteNote){
//成绩最差
schlechtesteNote=Integer.parseInt(jTNote.getText());
setText(Integer.toString(schlechtesteNote));
}
如果(i>=Integer.parseInt(jtanzahlnote.getText()){
//如果单击=等级数量->停止
jBÜbernehmen2.setVisible(假);
jBNeueBerechnung.setVisible(true);
JT注:立根背景(颜色:浅灰色);
jTNote.setFocusable(假);
}否则{
jTNote.requestFocus();
jTNote.setText(“”);
}
}
}
[...]
这不是全部代码,只是关键部分

期望值:foreach循环应该给出我输入的分数。 示例:应输入三个等级,我输入1、2和3。最后一行应给出:“注:1.0、2.0、3.0”

但在第一次点击时,它会给出:“注意:1.0,0.0,0.0”。第二次单击:“备注:0.0、2.0、0.0”第三次单击:“备注:0.0、0.0、3.0”


它只打印最近输入的成绩,但为什么?数组的变量声明为public?!我就是不明白…

在将新值放入数组之前,您一直在初始化数组:

        noten = new double[anzahlnoten];
        noten[i-1] = Double.parseDouble(jTNote.getText());
确保只调用
noten=newdouble[anzahlnoten]一次

例如,可以在声明数组时对其进行初始化:

public double [] noten = new double[someFixedLength];

解决方案:不要重新创建阵列。删除顶行。1+如果我删除上面这一行,我会得到一个java.lang.NullPointerException:-/@user4102425你不应该完全删除它,你应该把它移到一个只调用一次的地方。thaaanks它现在可以工作了:-)我想我应该更仔细地看看启动和其他东西,当然它现在就有意义了。每次我按下按钮,对象都被创建为新的,这当然会丢失以前的信息。大小相同,但由于i++切换,位置相同