【问题标题】:double array loses its information双数组丢失了它的信息
【发布时间】:2014-10-05 18:26:53
【问题描述】:

我正在为我的班级编写一个带有摆动组件的小程序,但我在将信息存储在双精度数组中时遇到了问题。该程序完全按照我的意愿运行,只有一个例外:我通过“public double [] note;”声明一个数组;在 actionlistener 的私有方法之外。但是数组是在私有方法中初始化的。

[...]
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("");
            }

        }


    }
[...]

这不是全部代码,只是关键部分

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

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

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

【问题讨论】:

    标签: java arrays swing


    【解决方案1】:

    在将新值放入其中之前,您会不断重新初始化数组:

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

    确保您只调用一次noten = new double[anzahlnoten];

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

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

    【讨论】:

    • 解决方案:不要重新创建数组。删除第一行。 1+
    • 如果我删除上面的行我得到一个 java.lang.NullPointerException :-/
    • @user4102425 你不应该完全删除它,你应该把它移到一个只会被调用一次的地方。
    • thaaanks 它现在可以工作了 :-) 我想我应该仔细看看启动和东西 thx
    • 当然现在有意义了。每次我按下按钮时,都会创建新的对象,这当然会丢失以前的信息。大小相同,但由于 i++ 切换了位置
    猜你喜欢
    • 2011-05-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多