Fehler im Code, aber ich weiß nicht wieso!

jkr

Mitglied
Hi Leute,
ich bin seit ein paar Tagen am Programmieren dran, finde es mega interessant und spannend.
Jetzt bin ich fast fertig, aber es gibt einen fahler und ich weiß nicht, wie ich den baheben kann!
Kann mir jemand behilflich sein? Der Fehler ist weiter unten.

Java:
package NotendurchschnittFenster;

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

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

import Fenster.mylistener;



public class Jframe extends JFrame {
    
    JLabel text;
    JButton button;
    
    public Jframe() {
        setVisible(true);
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocation(450, 200);
        setTitle("Notendurchschnitt des Endzeugnisses");
        setLayout(null);
        
        text = new JLabel("Willkommen");
        text.setBounds(30, 30, 3000, 60);
        Font schrift = (text.getFont()).deriveFont (Font.PLAIN, 30);
        text.setFont(schrift);
        add(text);
        
        button = new JButton("Klick mich");
        button.setBounds(30, 250, 150, 80);
        button.addActionListener(null);
        button.setToolTipText("Drücke diesen Knopf, um den Notendurchschnitt zu sehen!");
        button.addActionListener(new mylistener(text));
        add(button);
        
    }
    
    public class Notendurchschnitt {
        
        double ma = 1.0;double ph = 1.0;double mu = 1.0;
        double en = 2.0 ;double ch = 2.0;double de = 3.0;       
        double bio = 2.0;double sp = 1.0;double fr = 3.0;
        double ge = 1.0 ;double po = 2.0;double erdk = 1.0;
        int zergebnis;
        double ergebnis;     // Das " ; " wird bei mir als fehler angezeigt, ich weiß nicht wieso, wer kann helfen?
        
        zergebnis =  ma + ph + mu + en +ch + de + bio + sp +fr + ge + po + erdk;
        
        ergebnis = zergebnis / 12;
        
        


    class mylistener implements ActionListener{           
        
        JLabel lbl;
    
        mylistener(JLabel lbl){
                this.lbl = lbl;
    }
        
        @Override
        public void actionPerformed(ActionEvent arg0) {
            lbl.setText("du hast einen Notendurchschnitt von" + ergebnis);
        }
    }
    }
    }
}
 
PS: Das gehört auch noch mit zum Code:

Code:
package NotendurchschnittFenster;

import javax.swing.JFrame;

public class Main {
    public static void main (String [] args) {
        
        JFrame jf = new Jframe ();
        }
}
 
Das Problem ist nicht das Semikolon, sondern der Code danach:
Code:
zergebnis =  ma + ph + mu + en +ch + de + bio + sp +fr + ge + po + erdk;
ergebnis = zergebnis / 12;
Ausführbarer Code (bzw. Anweisungen wie diese) dürfen nur innerhalb von Methoden (oder Konstruktoren oder Initializer-Blöcken) stehen.
Hier steht dieser Code aber ausserhalb einer Methode direkt in der Klassendeklaration der Klasse Notendurchschnitt.
Vielleicht wolltest du eher die Zuweisung als Ausdruck direkt bei der Instanzvariablendeklaration verwenden?
 
Weiterhin fehlt zur Rekonstruktion des Projekts der Code zu "Fenster.mylistener;"
Und bei der Initialisierung sollte nicht "int" sondern "double" verwendet werden: "Possible loss of precision"
Code:
 double zergebnis =  ma + ph + mu +...
 
Das Problem ist nicht das Semikolon, sondern der Code danach:
Code:
zergebnis =  ma + ph + mu + en +ch + de + bio + sp +fr + ge + po + erdk;
ergebnis = zergebnis / 12;
Ausführbarer Code (bzw. Anweisungen wie diese) dürfen nur innerhalb von Methoden (oder Konstruktoren oder Initializer-Blöcken) stehen.
Hier steht dieser Code aber ausserhalb einer Methode direkt in der Klassendeklaration der Klasse Notendurchschnitt.
Vielleicht wolltest du eher die Zuweisung als Ausdruck direkt bei der Instanzvariablendeklaration verwenden?

Vielen Dank an dich @httpdigest ! Habe es jetzt geschafft, danke.
 
Zuletzt bearbeitet:
Moin,

zum einen kannst Du die Zeilen auch deutlich kürzer (und damit lesbarer) schreiben:
Java:
int zergebnis =  ma + ph + mu + en +ch + de + bio + sp +fr + ge + po + erdk;
double ergebnis = zergebnis / 12;

Und du solltest DRINGEND über die Benennung Deiner Variablen nachdenken!!
Das ist so nicht nur schwer lesbar, sondern Du weist (vor allem wenn so wein Programm größer wird) in einem halben Jahr selbst nicht mehr, was sie bedeuten!
Wofür steht bspw. das 'z' in 'zergebnis'??

Das Zauberwort heißt "sprechende Variablennamen"!!
Die Namen der Fächer auszuschreiben ist doch nicht soviel Arbeit!

Dann noch ein Tipp: gewöhn' Dir gleich an, auf 'magic numbers' zu verzichten!
Deine '12' ist gefährlich! Wenn Du morgen ein weiteres Fach hinzufügst, sind die Chancen hoch zu vergessen, die 12 in 13 zu ändern!
Besser vor die Fächer ein
Java:
int faecheranzahl = 12;
// ...
double ergebnis = zergebnis / faecheranzahl;

VG Klaus
 

Zurück
Oben