Я пишу небольшую программу с компонентами swing для моего класса, и у меня есть проблема с хранением информации в двойном массиве. Программа работает точно так же, как я хочу, только с одним исключением: я объявляю массив через «public double [] noten;» за пределами частных методов действий пользователей. Однако массив инициируется внутри частного метода.двойной массив теряет информацию
[...]
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("");
}
}
}
[...]
это не весь код, только основная часть
Expectation: цикл Еогеасп должен давать оценки, которые я Введенные. Пример: нужно ввести три разряда и ввести 1,2 и 3. В конце строки следует указать: «Нот: 1.0, 2.0, 3.0»
Но вместо этого при первом нажатии он дает: «Нота: 1,0, 0,0, 0,0 ". Второй клик: «Noten: 0.0, 2.0, 0.0» Третий клик: «Noten: 0.0, 0.0, 3.0».
Он печатает только последние введенные оценки, но почему? Переменная для массива объявляется общедоступной?! Я просто не понимаю ...
Решение: не воссоздавать массив. Удалите верхнюю строку. 1+ –
если я стираю вышеприведенную строку, я получаю java.lang.NullPointerException: -/ – SklogW
@ user4102425 Вы не должны полностью ее удалять, вы должны перенести его в место, где он будет вызываться только один раз. – Eran