Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wenn ich z.b fünf zweien eingebe kommt als Durchschnitt 1 raus obwohl ja eigentlich wieder eine 2 rauskommen sollte.
Zweites Problem:
Wenn ich andere Zahlen eingebe werden diese zu den bereits bestehenden Ergebnissen hinzuaddiert. Gibt es hier eine Möglichkeit mit der man alle bereits eingelesenen Werte beim betätigen der Buttons wieder löschen kann?
dein proble war, dass du die variablen
1) nicht vorinitialisiert hattest
2) nicht zurücksetzt, wenn du einen erneuten durchlauf machst, somit steigt h0 und summe irgendwann in den himmel...
hier die buttonActon-methode nochmal...
Code:
private void jButton1ActionPerformed(ActionEvent evt) {
temp = 0;
summe = 0;
h0 = 0;
for (int i = 0; i < jTextField.length; i++) {
temp = Integer.parseInt(jTextField[i].getText()); //Speichervariable
if (temp > 0) { //Häufigkeiten ermitteln
summe += temp; //Summenberechnung
h0++;
}
}
average = summe / h0; //Durchschnitt
jTextField11.setText(String.valueOf(average));
}
Bei mir läuft das ohne Probleme und ohne Fehlermeldungen - abgesehen von den beiden genannten. Aber das war ja klar, dass die hier wieder vorhanden sind.
Ich weiß, dass ich es nicht zurücksetze. Deswegen hab ich ja gefragt. Ich weiß nämlich nicht wie ich das machen soll. Mit setText("") geht es irgendwie nicht...
So wie du es gemacht hast ist es deutlich einfacher und es funktioniert. Danke! Ich muss es immer umständlich machen.
Trotzdem verstehe ich nicht was an meiner Methode falsch war. h0 wir immer hochgezählt wenn eine 0 eingegeben wird. Gleichzeitig werden die eingegebenen Zahlen miteinander addiert. Danach wird von der Anzahl der Textfelder h0 subtrahiert. Der Durchschnitt berechnet sich dann aus der Summe der Zahlen dividiert durch den Rest. Erkennt da jemand den Denkfehler?
das programm funktioniert doch jetzt, oder welche fehler sind jetzt noch drin???
du müsstest noch prüfen bevor du teilst ob h0 == 0 ist. teilen durch 0 ist nicht so gut. :noe:
edit:
außerdem ist es quatsch die avarage variable vom typ float zu machen. denn wenn du integer durch integer teilst bekommst du auch ein integer zurück. :wink:
außerdem ist es quatsch die avarage variable vom typ float zu machen. denn wenn du integer durch integer teilst bekommst du auch ein integer zurück. icon_wink.gif
Hab ich nicht gewusst. Aber jetzt weiß ich es. Schon wieder was gelernt. Das hat sich dann auch erledigt.
Das Zurücksetzten der Textfelder hat mir Probleme bereitet, ich hab jetzt aber eine Lösung gefunden. Jetzt werden mit "setText("")" einfach die Textfelder gelöscht und mit "variable = 0" setz ich die betroffenen Variablen wieder auf den Anfangswert zurück. Geht zwar bestimmt professioneller, aber das erfüllt ja seinen Zweck:
Code:
private void jButton1ActionPerformed(ActionEvent evt) {
for (int i = 1; i < jTextField.length; i++) {
temp = Integer.parseInt(jTextField[i].getText());
if (temp > 0) {
summe += temp;
haeufigkeit++;
}
if (temp == 0) h0++;
else if (temp == 1) h1++;
else if (temp == 2) h2++;
else if (temp == 3) h3++;
else if (temp == 4) h4++;
else if (temp == 5) h5++;
else h6++;
}
jTextField21.setText("");
jTextField22.setText("");
jTextField23.setText("");
jTextField24.setText("");
jTextField25.setText("");
jTextField26.setText("");
jTextField27.setText("");
jTextField28.setText("");
}
private void jButton2ActionPerformed(ActionEvent evt) {
if (haeufigkeit != 0) {
average = summe / haeufigkeit;
jTextField21.setText(String.valueOf(average));
} else jTextField21.setText("Kein Schüler hat eine Arbeit geschrieben");
jTextField22.setText(String.valueOf(h0));
jTextField23.setText(String.valueOf(h1));
jTextField24.setText(String.valueOf(h2));
jTextField25.setText(String.valueOf(h3));
jTextField26.setText(String.valueOf(h4));
jTextField27.setText(String.valueOf(h5));
jTextField28.setText(String.valueOf(h6));
temp = 0;
haeufigkeit = 0;
summe = 0;
average = 0;
h0 = 0;
h1 = 0;
h2 = 0;
h3 = 0;
h4 = 0;
h5 = 0;
h6 = 0;
}
außerdem ist es quatsch die avarage variable vom typ float zu machen. denn wenn du integer durch integer teilst bekommst du auch ein integer zurück. :wink: