0

I'm trying to create a little game as a project to help myself learn how to code. Basically I'm trying to have 2 buttons. One of which will generate a new random number and the other will allow you to guess the number. The error I'm having is I can't create an Actionlistener that will generate a new number when the button is clicked since it won't let me change the int outside of the Lambda expression itself.

Any help is really appreciated!

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

/**
 * Created by Alex on 10/15/2018.
 */
public class NumberGame
{

    public static void main(String[] args) {
        int gamesNumber = 0;
        int myNumber;

        JFrame gameGUI = new JFrame("Number guess game");
        gameGUI.setSize(400,400);
        gameGUI.setVisible(true);
        gameGUI.setLayout(null);
        gameGUI.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //Create components for GUI
        JLabel AmIRight = new JLabel();
        JLabel generateNumber = new JLabel();
        JButton chooseNumber = new JButton("Choose");

        JButton generateNumber2 = new JButton("Generate");
        generateNumber2.addActionListener(e -> {
            Random rand = new Random();
            int number = rand.nextInt(10) + 1;
            gamesNumber = number;
            System.out.println(gamesNumber);
        });

        //Calling Methods
        //gamesNumber = GenerateRandomNumber();

        //Adding components to GUI
        gameGUI.add(AmIRight);
        gameGUI.add(chooseNumber);
        gameGUI.add(generateNumber);
        gameGUI.add(generateNumber2);

        //Give components properties
        AmIRight.setBounds(40,100,300,300);
        AmIRight.setText("Push the button below to choose a number to guess!");
        generateNumber.setBounds(60,-100,300,300);
        generateNumber.setText("Push the button below to Generate a number!");
        chooseNumber.setBounds(130,270,100,50);
        generateNumber2.setBounds(130,70,100,50);

    }


}
Sergiy Medvynskyy
  • 11,160
  • 1
  • 32
  • 48
Motive
  • 1
  • maybe this will be helpful https://stackoverflow.com/questions/34865383/variable-used-in-lambda-expression-should-be-final-or-effectively-final – Wojciech Wirzbicki Oct 15 '18 at 11:07
  • 3
    Possible duplicate of [Variable used in lambda expression should be final or effectively final](https://stackoverflow.com/questions/34865383/variable-used-in-lambda-expression-should-be-final-or-effectively-final) – Wojciech Wirzbicki Oct 15 '18 at 11:08
  • See https://stackoverflow.com/questions/52619827/javafx-eventhandling-on-final-and-effectively-final-variables/52620253#52620253 – c0der Oct 15 '18 at 15:09

1 Answers1

0

You need to define the gamesNumber as a member field

public class NumberGame
{
    private static int gamesNumber = 0;
    public static void main(String[] args) {
        int myNumber;

        JFrame gameGUI = new JFrame("Number guess game");
Sergiy Medvynskyy
  • 11,160
  • 1
  • 32
  • 48