Mittelwert mit Gui

Warum gibt das Programm den Mittelwert 0.0 raus?

  • die Rechnung/Mehtode selbst ist nicht richtig

    Stimmen: 2 100,0%
  • das Feld ist mit Nullen gefüllt

    Stimmen: 0 0,0%

  • Anzahl der Umfrageteilnehmer
    2

Remigina

Mitglied
Einen schönen guten Tag alle zusammen.
Mit Gui habe ich kaum Erfahrungen, muss ein Projekt machen. Wollte einen statistischen Taschenrechner erstellen, und schon bei dem Mittelwert scheitert es. Die zufälligen Zahlen, habe erst auf 3 begrenzt. Und von denen sollte Mittelwert errechnet werden.
Anscheinend die Methode zur Berechnung des Mittelwerts ist schon falsch, nur weiß ich leider nicht mehr weiter. Werde für jede Hilfe sehr dankbar sein.

leider habe ich das Feld für die Code nicht gefunden(((( deswegen poste ich hier mit...

JButton btnmittelwert = new JButton("Mittelwert");
btnmittelwert.addActionListener(new ActionListener() {
private int i;
public void actionPerformed(ActionEvent arg0) {

int [] wert =new int[3];
double mittelwert;
double summe =0 ;

for (int i = 0; i < wert.length; i++);{
mittelwert = summe+ wert;

}
summe /= wert.length;
txt_Ergebnisse.setText( "Mittelwert: " + mittelwert );

Gruß Remigina
 

olfibits

Aktives Mitglied
Wenn du in der for-Schleife einen Eintrag aus wert[] haben willst musst du selbstverständlich mittelwert = summe+ wert; schreiben. Dann solltest du das Array aber auch dementsprechend initialisieren mit random() wenn du zufällige Zahlen willst wie du schreibst - oder ehrliche Frage: verstehe ich da was falsch?

Edit: Das Ding heißt übrigens Methode, nicht Mehtode :)
 

VfL_Freak

Top Contributor

Remigina

Mitglied
Ich poste am besten die ganze Code, wo die Zufallszahlen auch erzeugt sind.
Mit Methode war ein Tippfehler, danke schon mal recht herzlich:)

package Calculator;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class versuch extends JFrame {

/**
*
*/
private static final long serialVersionUID = 2915991130900996102L;
private JPanel contentPane;
private JTextField txt_Werte;
private JTextField txt_Ergebnisse;

/**
* Launch the application.
*/
public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
public void run() {
try {
versuch frame = new versuch();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public versuch() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JButton btnZufall = new JButton("Zufall");
btnZufall.addActionListener(new ActionListener() {
private int i;

public void actionPerformed(ActionEvent arg0) {

int wert = 0;
int [] a = new int [3];
for (int i = 0; i<3; i++){
a=wert;
wert=(int)(Math.random()*100)+1;

txt_Werte.setText(txt_Werte.getText() + " " + wert);
}

}});
btnZufall.setBounds(0, 228, 89, 23);
contentPane.add(btnZufall);

txt_Werte = new JTextField();
txt_Werte.setBounds(135, 155, 259, 23);
contentPane.add(txt_Werte);
txt_Werte.setColumns(10);

JEditorPane editorPane = new JEditorPane();
editorPane.setBounds(125, 11, 269, 133);
contentPane.add(editorPane);

JButton btnmittelwert = new JButton("Mittelwert");
btnmittelwert.addActionListener(new ActionListener() {
private int i;
public void actionPerformed(ActionEvent arg0) {

int [] wert =new int[3];
double mittelwert;
double summe =0 ;

for (int i = 0; i < wert.length; i++);{
mittelwert = summe+ wert;

}
summe /= wert.length;
txt_Ergebnisse.setText( "Mittelwert: " + mittelwert );
}});

btnmittelwert.setBounds(89, 228, 89, 23);
contentPane.add(btnmittelwert);

JButton btnNewButton_1 = new JButton("Median");
btnNewButton_1.setBounds(174, 228, 89, 23);
contentPane.add(btnNewButton_1);

JButton btnNewButton_2 = new JButton("Varianz");
btnNewButton_2.setBounds(259, 228, 89, 23);
contentPane.add(btnNewButton_2);

JButton btnNewButton_3 = new JButton("Standartabweichung");
btnNewButton_3.setBounds(345, 228, 89, 23);
contentPane.add(btnNewButton_3);

txt_Ergebnisse = new JTextField();
txt_Ergebnisse.setBounds(135, 189, 128, 20);
contentPane.add(txt_Ergebnisse);
txt_Ergebnisse.setColumns(10);
}
}
 

Remigina

Mitglied
Mit einzelnen Indizes, dachte ich geht mit der for-Schleife alle Zahlen durch. Wie ist das mit 'a' noch 'a' gemeint? Verstehe ich leider nicht.
Viele Grüße Remigina
 

VfL_Freak

Top Contributor
mittelwert = summe+ wert;
Du greifst hier ja nicht auf einzelne Elemente Deine Arrays zu !!
Also wenn Du es durchläufst, dann zumindest:
Java:
// ACHTUNG: hier muss das Semikolon weg !!
// es beendet sonst SOFORT die Schleife !!!!!
for( int i = 0; i < wert.length; i++ );
{
    mittelwert = summe + wert; // Das compiliert so nicht! Allenfalls mit wert[i]
}
Wobei Du hiermit aber auch KEINEN Mittelwert berechnest!!

Mal ein Denkanstoss:
Java:
for( int i = 0; i < wert.length; i++ );
{
    summe += wert[i];
}

// und dann etwa:
mittelwert = summe / wert.length;

Dann musst noch darauf achten, dass Du wild mit double und int hantierst!
Ggf. muss das Ergebnis einer Berechnung gecastet rsp. konvertiert werden!

VG Klaus
 

Remigina

Mitglied
Soll ich dann auch großes I initialisieren? Verstehe ich nicht ganz, warum doppel Indizes?
und anstatt int[] sollte ich lieber double nehmen?
Java:
[I]double [] wert =new double[3];
double mittelwert;
double summe =0 ; [/I]
 

Robat

Top Contributor
Zusätzlich zu dem was @VfL_Freak bereits sagte:

Dein Array welches du im ersten ActionListener anlegst / befüllst hast nichts mit dem Array aus dem zweiten ActionListener zu tun.
Das bedeutet nur weil du a mit Werten befüllst hat wert nicht automatisch auch die Werte!
Dein Array müsste zumindestens im kompletten Kontext deines Konstruktor bekannt sein.

Java:
public versuch() {
    btnZufall.addActionListener(new ActionListener() {
        private int i;
        public void actionPerformed(ActionEvent arg0) {
            int wert = 0;
            int[] a = new int[3];
            //...
        }
    });
    btnmittelwert.addActionListener(new ActionListener() {
        private int i;
        public void actionPerformed(ActionEvent arg0) {
            int[] wert = new int[3];
            // ...
        }
    });
    // ...
}

Außerdem hast du hier noch einen Fehler.. hinter eine for-Schleife kommt kein Semikolon!
Java:
for (int i = 0; i < wert.length; i++);{
    mittelwert = summe + wert;
}

Die Datentypen waren schon so ok wie du sie hattest.
Java:
int[] array = new int[3];
double mittelwert = 0;
double summe = 0; // hier würde ich eher auf ein int setzen. Die Summe aus Ganzzahlen ist auch wieder eine Ganzzahl ;)
 

VfL_Freak

Top Contributor
Nein, natürlich nicht.
Das ist durch Deine kursive Formatierung ohne Code-Tags da rein gerutscht!!
Ich habe es doch schon korrigiert :rolleyes:

Java:
int wert = 0;
int [] a = new int [3];
for( int i = 0; i<3; i++ )
{
     a = wert; // das geht so nicht!!! wenn überhaupt, dann a[i] = wert !!
     wert=(int)(Math.random()*100)+1; // dies solltest Du dann auch VOR der Zuweisung machen, sonst bringt es wenig!
}
// ===========================================================
int[] wert = new int[3];
double mittelwert;
double summe =0 ;
for( int i = 0; i < wert.length; i++ );
{
    mittelwert = summe + wert; // siehe vorheriger Post !!!!!
                               // außerdem ist Array 'wert' hier nicht initialisiert!!!!!
}
summe /= wert.length;

VG Klaus
 

Remigina

Mitglied
Oh danke,
stimmt das war ein blödes Fehler von mir.
Java:
public void actionPerformed(ActionEvent arg0) {
              
                int wert = 0;
                int []a  = new int [3];
                for (int i = 0; i<3; i++){
                a[i]=wert;
                wert=(int)(Math.random()*100)+1;

                txt_Werte.setText(txt_Werte.getText() + " " + wert);  
                }
Und mit Initialisierung so ist richtig?:
Java:
int [] wert =new int[3];
                int mittelwert=0;
                int summe =0 ;
              
                for (int i = 0; i < wert.length; i++){
                summe+=wert[i];
}
                mittelwert=summe / wert.length;
                txt_Ergebnisse.setText( "Mittelwert:  " + mittelwert  );}});
 

Remigina

Mitglied
Ich weiß nicht welche Zeile gemeint ist mit Array.
Ich habe das jetzt so gemacht und ist das auch falsch?
Java:
int [] wert;
                 wert =new int[3];
                int mittelwert=0;
                int summe =0 ; 
               
                for (int i = 0; i < wert.length; i++){
                summe+=wert[i];
                }
                mittelwert=summe / wert.length;
                txt_Ergebnisse.setText( "Mittelwert:  " + mittelwert  );
 

Robat

Top Contributor
Java:
public versuch() {
    int[] wert = new int[3]; // das array ist jetzt im gesamten Konstruktor bekannt .. nicht nur im Listener

    button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // array füllen
            array[i] = ...
        }
    });

    button2.addActionListener(new ActionListener() {
        @Override
         public void actionPerformed(ActionEvent e) {
             // mittelwert berechnen...
         }
     }
}
 

Remigina

Mitglied
Ach ok danke schön, Array sollte ganz oben initialisiert werden.
Aber die Methode um die Zufallszahlen zu erzeugen ist ok?
Wie mache ich, dass es Mittelwert berechnet wird, was ist da noch falsch, bzw. fehlt da noch was?
Ich bin leider ganz schlecht im Programmieren und das mit GUI ist was ganz kompliziertes für mich...
 

Robat

Top Contributor
So schwer ists doch gar nicht.
Java:
int[] array = { 1,2,3,4};
int len = array.length;
int summe = 0;

for(int i = 0; i < len; i++) {
    summe += array[i];
}

double mittelwert = summe / (double) len;
 

Remigina

Mitglied
Und wenn ich mehr als 3 Zahlen möchte, muss ich nur die geschweiften Klammern erweitern?
Dann sind das doch keine Zufallszahlen? Oder liege ich voll daneben?
 

Robat

Top Contributor
Sicher sind das keine Zufallszahlen aber ich kann dir ja auch nicht alles vorgeben..
Ein wenig Verständnis und Wille setze ich schon voraus..
 

Remigina

Mitglied
ja das ist klar, aber Zufallszahlen hatte ich ja schon erzeugt...
Java:
JButton btnZufall = new JButton("Zufall");
        btnZufall.addActionListener(new ActionListener() {
            @Override

            public void actionPerformed(ActionEvent arg0) {
               
                double wert = 0;
                double []a  = new double [3];
                for (int i = 0; i<3; i++){
                a[i]=wert;
                wert=(int)(Math.random()*100)+1;

                txt_Werte.setText(txt_Werte.getText() + " " + wert);   
                }       
            }});
oder soll ich die einfach in die Methode Mittelwert einsetzen?
 

Robat

Top Contributor
Du deklarierst das Array doch schon wieder im ActionListener...
Kein Wunder dass alle Werte im eigentlichen Array 0 bleiben...
 

Neue Themen


Oben