2014-10-05 133 views
0

我正在爲我的類編寫一個帶有swing組件的小程序,我在將信息存儲在double數組中時遇到了問題。該程序完全按照我的需要工作,只有一個例外:我通過「public double [] noten」聲明一個數組;「在行動者的私人方法之外。但是該數組是在私有方法內啓動的。double array丟失其信息

[...] 
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?!我只是不明白這一點...

回答

2

你留着重新初始化數組把一個新值之前:

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

確保只調用一次noten = new double[anzahlnoten];

例如,您可以在聲明它初始化數組:

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

解決辦法:不要再創建陣列。刪除頂部行。 1 + – 2014-10-05 18:29:42

+0

如果我刪除上面的行我得到一個java.lang.NullPointerException: -/ – SklogW 2014-10-05 18:31:53

+0

@ user4102425你不應該完全抹去它,你應該把它移到一個地方,它只會被調用一次。 – Eran 2014-10-05 18:32:54