Ich brauche Hilfe

TpKey10

Mitglied
Hi ich habe ein kleines Problem bei der Verbindung zwischen meiner Minesweeper Gui und Minesweeper Logik .Bei dem compilen beider Codes kommt folgender Fehler:
Java:
 Msgui.java:68: error: local variables referenced from an inner class must be final or effectively final
                                                sf.linksKlick(i, j);
                                                              ^
Msgui.java:68: error: local variables referenced from an inner class must be final or effectively final
                                                sf.linksKlick(i, j);


Code:
class Spielfeld{
    int h;
    int b;
    int am;
    Feld[][]s;
   
    Spielfeld(int h, int b, int am){
        this.h = h;
        this.b = b;
        this.am = am;
       
        s = new Feld[h][b];
       
        for(int i=0; i<h;i++){
            for(int j=0; j<b;j++){
                s[i][j] = new Feld();
            }
        }
        setMine();
        setanzahl();
    }
    public void setMine(){
        boolean anzahlMine = true;
        int counter = 0;
        if(am<=0){
            anzahlMine = false;
        }
        while(anzahlMine){
            int h = (int)(Math.random()*this.h);
            int b = (int)(Math.random()*this.b);   
            if(!s[h][b].getMine()){
                s[h][b].setMine();
                counter++;
            }
            if(counter == am){
                anzahlMine = false;
            }
        }
    }
   
   
    public void setanzahl(){
        for(int x = 0; x<s.length;x++){
            for(int y=0;y<s[0].length;y++){
                if(!s[x][y].getMine()){
                    int nachbar = 0;
                    if(x>0 && y>0 && s[x-1][y-1].getMine()){ //hoch links
                        nachbar++;
                    }
                    if(x>0 && y<s[0].length-1 && s[x-1][y+1].getMine()){ // unten links
                        nachbar++;
                    }
                    if(x>0 && s[x-1][y].getMine()){// links
                        nachbar++;
                    }
                    if(x<s.length-1 && y>0 && s[x+1][y-1].getMine()){//hoch rechts
                        nachbar++;
                       
                    }
                    if(x<s.length-1 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten rechts
                        nachbar++;
                    }
                    if(x<s.length-1 &&  s[x+1][y].getMine()){ // rechts
                        nachbar++;
                    }
                   
                    if(y>0 && s[x][y-1].getMine()){ //hoch
                        nachbar++;
                    }
                   
                    if(y<s[0].length-1 && s[x][y+1].getMine()){// unten
                        nachbar++;
                    }
                   
                   
                   
                   
                   
                    s[x][y].setanzahl(nachbar);
                }
            }
        }
    }
    public void print(){
        for(int i=0; i<h; i++){
            System.out.println(" ");
            for(int j=0; j<b; j++){
                String z = "?";
                if(s[i][j].getgeoeffnet())
                    z = "+";
                else 
                    z = "-"; 
                if(s[i][j].getMine()){
                    System.out.print(" *"+z);
                }else{
                    System.out.print(" "+s[i][j].getanzahl()+z);
                }
            }
        }
    }
    public void linksKlick(int x, int y){
           
            if(x>=0 && y>=0 && x< s.length && y<s[0].length){
                if(s[x][y].istgeoeffnet == false) {
                   s[x][y].istgeoeffnet = true;
               
                    if(s[x][y].getMine()){
                       
                        System.out.println("Verloren");
                    }
               
                    if(s[x][y].anzahlMine == 0){
                        linksKlick(x -1, y -1);
                        linksKlick(x -1, y +1); 
                        linksKlick(x -1, y);
                        linksKlick(x +1, y -1);
                        linksKlick(x +1, y +1);
                        linksKlick(x +1, y );       
                        linksKlick(x , y -1);
                        linksKlick(x , y +1);
                }
                }
            }
            }
         
    }

Java:
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.layout.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.event.*;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.paint.Paint;
import javafx.scene.paint.Color;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import java.io.FileInputStream;




public class Msgui extends Application{
   
    Spielfeld sf;
   
   public void start(Stage stage){       
        stage.setTitle("Minesweeper");
        BorderPane root = new BorderPane();   
        HBox oben = new HBox();
        GridPane spiel = createSpiel();               
        MenuBar menuBar = createMenu();
        oben.getChildren().addAll(menuBar);
        root.setTop(oben);
        root.setCenter(spiel);
        Scene scene = new Scene(root);
       
        root.setStyle("-fx-background-color: #C1CDCD;");
       
        stage.setScene(scene);
        stage.show();
       
       
       
    }
    public static void main(String[] a){
        launch(a);
    }
   
    GridPane createSpiel(){
        sf = new Spielfeld(15, 15, 35);
        GridPane spiel = new GridPane();
        for(int i=0; i < 15; i++){
            for(int j=0; j < 15; j++){
                Button t = new Button();
               
                t.setStyle("-fx-background-color:  #676664; -fx-border-width: 1px; -fx-border-color: #ffffff;");
               
               
                t.setPrefSize(25, 25);
               
           
               
                t.setOnAction(new EventHandler<ActionEvent>() {

                   
                    public void handle(ActionEvent e) {

                    sf.linksKlick(i, j);

                       
                       
                        update();
                       
                    }
                });
               
                spiel.add(t,i,j);
            }
        }
        return spiel;
    }
   
   
    MenuBar  createMenu(){
        MenuBar menuBar = new MenuBar();
        Menu menu = new Menu("Datei");
        MenuItem newItem = new MenuItem("Neu");
        MenuItem quitItem = new MenuItem("Beenden");
       
        menu.setStyle("-fx-selection-bar: #FFA500;");
       
        quitItem.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent e){
                System.exit(1);
            }
        });
       
        menu.getItems().addAll(newItem,quitItem);
        menuBar.getMenus().addAll(menu);   
        return menuBar;
    }
   
    void update(){
        /*    t.setStyle("-fx-background-color: #C1CDCD; -fx-border-width: 1px; -fx-border-color: #FFFFFF;");*/


   
    }
   
}
 

mihe7

Top Contributor
Du veränderst i und j und versuchst, in der anonymen Klasse darauf zuzugreifen. Das geht so nicht. Entweder Du deklarierst im Schleifenrumpf zwei final int-Variablen (z. b. x und y), die Du dann im EventHandler statt i und j verwendest. Oder, Du machst es sauber über eine eigene Klasse, wobei Du dem Konstruktor i und j mitgibst.
 
X

Xyz1

Gast
Kannst Du bitte eine Top-Down Beschreibung dessen machen, was das ist? (Also die Java Klasse Spielfeld und Msgui usw...)
 

TpKey10

Mitglied
Du veränderst i und j und versuchst, in der anonymen Klasse darauf zuzugreifen. Das geht so nicht. Entweder Du deklarierst im Schleifenrumpf zwei final int-Variablen (z. b. x und y), die Du dann im EventHandler statt i und j verwendest. Oder, Du machst es sauber über eine eigene Klasse, wobei Du dem Konstruktor i und j mitgibst.

kannst du mir damit helfen?
 

mihe7

Top Contributor
Java:
        for(int i=0; i < 15; i++){
            for(int j=0; j < 15; j++){
                Button t = new Button();
                t.setStyle("-fx-background-color:  #676664; -fx-border-width: 1px; -fx-border-color: #ffffff;");               
                t.setPrefSize(25, 25);
                final int x = i;
                final int y = j;
                t.setOnAction(new EventHandler<ActionEvent>() {
                    public void handle(ActionEvent e) {
                        sf.linksKlick(x, y);
                        update();
                    }
                });
                spiel.add(t,i,j);
            }
        }
 

TpKey10

Mitglied
Java:
        for(int i=0; i < 15; i++){
            for(int j=0; j < 15; j++){
                Button t = new Button();
                t.setStyle("-fx-background-color:  #676664; -fx-border-width: 1px; -fx-border-color: #ffffff;");              
                t.setPrefSize(25, 25);
                final int x = i;
                final int y = j;
                t.setOnAction(new EventHandler<ActionEvent>() {
                    public void handle(ActionEvent e) {
                        sf.linksKlick(x, y);
                        update();
                    }
                });
                spiel.add(t,i,j);
            }
        }
Danke schön :)
 

mihe7

Top Contributor
Die schönere Variante wäre, in Deine Klasse eine innere, aber benannte Klasse zu schreiben:
Java:
private class LinksClickHandler implements EventHandler<ActionEvent> {
    private int x;
    private int y;
    public LinksClickHandler(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public void handle(ActionEvent e) {
        sf.linksClick(x, y);
        update();
    }
}
und diese dann zu verwenden:
Java:
        for(int i=0; i < 15; i++){
            for(int j=0; j < 15; j++){
                Button t = new Button();
                t.setStyle("-fx-background-color:  #676664; -fx-border-width: 1px; -fx-border-color: #ffffff;");             
                t.setPrefSize(25, 25);
                t.setOnAction(new LinksClickHandler(x, y));
                spiel.add(t,i,j);
            }
        }

Am schönsten wäre es allerdings, wenn die Handler-Klasse selbständig existieren könnte. Das ist mir jetzt aber zu viel Action, das sauber umzuschreiben :)
 

TpKey10

Mitglied
Die schönere Variante wäre, in Deine Klasse eine innere, aber benannte Klasse zu schreiben:
Java:
private class LinksClickHandler implements EventHandler<ActionEvent> {
    private int x;
    private int y;
    public LinksClickHandler(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public void handle(ActionEvent e) {
        sf.linksClick(x, y);
        update();
    }
}
und diese dann zu verwenden:
Java:
        for(int i=0; i < 15; i++){
            for(int j=0; j < 15; j++){
                Button t = new Button();
                t.setStyle("-fx-background-color:  #676664; -fx-border-width: 1px; -fx-border-color: #ffffff;");            
                t.setPrefSize(25, 25);
                t.setOnAction(new LinksClickHandler(x, y));
                spiel.add(t,i,j);
            }
        }

Am schönsten wäre es allerdings, wenn die Handler-Klasse selbständig existieren könnte. Das ist mir jetzt aber zu viel Action, das sauber umzuschreiben :)

du bist sehr süß mihe7 :) Das hast du gut gemacht
 

TpKey10

Mitglied
In meinem Programm sollen die geöffnete Felder ein Minen-Symbol oder eine Zahl enthalten, die die benachbarten Minen angibt. Wenn der Spieler einen Button mit Mine öffnet, so hat er verloren . Es werden dann auch alle vorhandenen Minen angezeigt. Die von ihm geöffnete wird dabei rot hinterlegt.
Kannst du mir es kurz erklären,wie man das macht?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
H Brauche Hilfe Java Basics - Anfänger-Themen 2
H Brauche hilfe Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
C Brauche Hilfe um ein Programm zu schreiben Java Basics - Anfänger-Themen 8
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
H Brauche Hilfe in Java Eclipse Programmieraufgabe Neuling Java Basics - Anfänger-Themen 3
D Brauche Dringend Hilfe...Prozedur/Funktionsprozedur Ergebnis augeben Java Basics - Anfänger-Themen 11
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
M Brauche Hilfe bei If-Scheifen Java Basics - Anfänger-Themen 2
F ich brauche Hilfe bei Listen Java Basics - Anfänger-Themen 13
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
E Ich Brauche Hilfe Java Basics - Anfänger-Themen 3
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
S Brauche hilfe in Java [Fehler in mein Code]? Java Basics - Anfänger-Themen 2
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
F Ich brauche Hilfe bei Objektorientierter Programmierung... Java Basics - Anfänger-Themen 19
L Input/Output Wurzelzeichen in der Konsole ausgeben | Brauche Hilfe Java Basics - Anfänger-Themen 6
J Brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 3
T Brauche Hilfe um ein Programm zu verstehe Java Basics - Anfänger-Themen 4
C Ich brauche hilfe für meine Klausur Java Basics - Anfänger-Themen 13
J Brauche Hilfe !! Java Basics - Anfänger-Themen 8
R Spielfeldbegrenzung einfügen (Java)? Brauche Hilfe! Java Basics - Anfänger-Themen 15
C Brauche dringend Hilfe. Umfrage mit ja und nein in Java erstellen? Java Basics - Anfänger-Themen 12
U Brauche Hilfe bei Programmierung einer Produktdatenbank App Java Basics - Anfänger-Themen 4
P Brauche Hilfe bei ResultSet mit MySQL Java Basics - Anfänger-Themen 6
T Datentypen Brauche Hilfe bei Arrays Java Basics - Anfänger-Themen 3
U Brauche Hilfe bei Bisektionsverfahren Java Basics - Anfänger-Themen 23
E Erste Schritte brauche hilfe zum verstehen einer Klasse(Tiefensuche) Java Basics - Anfänger-Themen 17
I Brauche Hilfe bei Schleifen Java Basics - Anfänger-Themen 18
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
S brauche hilfe bei Fehlersuche Java Basics - Anfänger-Themen 7
M JDK installieren Brauche dringend Hilfe Java Basics - Anfänger-Themen 2
L Brauche Hilfe bei Preisberechnungspogramm Java Basics - Anfänger-Themen 1
D Hilbert und Peano Kurve, ich brauche Hilfe Java Basics - Anfänger-Themen 4
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
V Hilfe-brauche eine Idee! Java Basics - Anfänger-Themen 5
R Brauche Hilfe beim fertigstellen eines Chat programms Java Basics - Anfänger-Themen 8
A Erste Schritte Brauche Hilfe Java Basics - Anfänger-Themen 2
D Brauche Hilfe für mein übungsprogramm Java Basics - Anfänger-Themen 16
S Klassen Brauche Hilfe bei Erstellung einer Klasse für einen Tachenrechner!!! Java Basics - Anfänger-Themen 6
W Brauche hilfe bei Hausübung Java Basics - Anfänger-Themen 10
D Brauche Hilfe bei Modulo (Übungsaufgabe) Java Basics - Anfänger-Themen 14
X Brauche Hilfe bei printOnScreen Methode !!! Java Basics - Anfänger-Themen 2
H mysql brauche hilfe, wer kann eine (längere) aufgabe für mich erledigen Java Basics - Anfänger-Themen 2
K Erste Schritte Brauche Hilfe bei Starten des Programms Java Basics - Anfänger-Themen 11
B Erste Schritte HILFE Brauche ein Beispiel für korrekte Syntax mit Semantikfehlern Java Basics - Anfänger-Themen 6
H Java von Kopf bis Fuß: Brauche Hilfe Java Basics - Anfänger-Themen 6
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
S brauche hilfe beim fehler finden Java Basics - Anfänger-Themen 2
S Erste Schritte BlueJ-Aufgabe: Programmcode / Brauche dringend Hilfe !!! Java Basics - Anfänger-Themen 37
A Brauche Hilfe bei Division von Feldzahl durch Ganzzahl Java Basics - Anfänger-Themen 3
F Java-Anfänger, brauche Hilfe Java Basics - Anfänger-Themen 3
F Java-Anfänger, brauche Hilfe Java Basics - Anfänger-Themen 2
C Brauche dringend hilfe beim exception im code Java Basics - Anfänger-Themen 5
G Brauche bitte Hilfe, bei umgekehrter Ausgabe!! Java Basics - Anfänger-Themen 6
B Erste Schritte Brauche Hilfe für ein UML Diagramm Java Basics - Anfänger-Themen 7
S ICh brauche Hilfe,weil Java in der Schule Java Basics - Anfänger-Themen 11
B Brauche Hilfe mit Aufgaben mit dem JavaEditor Java Basics - Anfänger-Themen 8
I Primzahlenberechnung [Brauche Hilfe] Java Basics - Anfänger-Themen 5
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
F Reader - brauche Hilfe Java Basics - Anfänger-Themen 19
T Brauche Hilfe bei Variabeln Java Basics - Anfänger-Themen 4
J Brauche Hilfe mit replaceFirst Java Basics - Anfänger-Themen 10
M Brauche Hilfe bei Struktogramm Java Basics - Anfänger-Themen 9
T Datentypen brauche dringende hilfe!dezi in Asci umwandeln! Java Basics - Anfänger-Themen 4
X DB4O Collections and Arrays, brauche dringend Hilfe! Java Basics - Anfänger-Themen 3
B brauche hilfe bei funktion erstellen Java Basics - Anfänger-Themen 8
S Brauche Hilfe bei if/else Java Basics - Anfänger-Themen 3
N Brauche Hilfe mit Kollisionserkennung! Java Basics - Anfänger-Themen 16
J Brauche Hilfe bei Methode Java Basics - Anfänger-Themen 9
Y Brauche Hilfe beim Programm Java Basics - Anfänger-Themen 83
G 2 dim. Strsing Arrays brauche Hilfe Java Basics - Anfänger-Themen 20
A Brauche hilfe String untertrennen Java Basics - Anfänger-Themen 12
L Brauche bitte dringend Hilfe für Klausur Java Basics - Anfänger-Themen 8
H Brauche bei einen bsp hilfe! Java Basics - Anfänger-Themen 2
D Währungsrechner brauche Hilfe Java Basics - Anfänger-Themen 10
R Vokabeltrainer / Brauche Hilfe Java Basics - Anfänger-Themen 8
L Brauche Hilfe! Java Basics - Anfänger-Themen 8
S WAV-DATEIEN INTERPRETIEREN UND UMWANDELN Brauche Hilfe Java Basics - Anfänger-Themen 3
A Brauche Hilfe mit einer Forschleife Java Basics - Anfänger-Themen 20
N brauche Hilfe Stringverarbeitung Java Basics - Anfänger-Themen 9
JeromeM90 (Brauche Hilfe) Binär- in Dezimalzahlkonverter Java Basics - Anfänger-Themen 8
M Brauche Hilfe bei Javaapplication für JuFo Java Basics - Anfänger-Themen 21
M Brauche Hilfe beim Verstehen vom Quellcode Java Basics - Anfänger-Themen 4
A brauche hilfe ( gpanel und n-ecke) Java Basics - Anfänger-Themen 11
V Brauche Hilfe beim Programmieren Java Basics - Anfänger-Themen 3
V Brauche Hilfe beim Programmieren Java Basics - Anfänger-Themen 9
S Brauche Hilfe mit waitFor() Java Basics - Anfänger-Themen 4
N Brauche dringende Hilfe Java Aplett läuft nicht! Java Basics - Anfänger-Themen 3
D Brauche Hilfe: Funktion zum Kombinieren von Werten Java Basics - Anfänger-Themen 5
T Brauche Hilfe: Access DB + Hashmap Java Basics - Anfänger-Themen 2
S brauche hilfe beim dateien kopieren / bearbeiten Java Basics - Anfänger-Themen 3
E brauche hilfe beim KeyListener Java Basics - Anfänger-Themen 4
N brauche hilfe zu tictactoe Java Basics - Anfänger-Themen 2
G Ich brauche eure Hilfe! Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben