1

I created a danish game where you should guess a number from 1-10.

When I enter a number to check if my guess is correct or not, then I get an error in the console.

Any ideas why I get a issue when I enter a number and check if the number is correct?

Game.java

import java.util.Random;

public class Game {
    int randomNumber;

    public Game() {
        // Set randomNumber to randon number [1;10]
        Random rand = new Random();
        randomNumber = rand.nextInt(10) + 1;
    }

    public int getRandomNumber() {
        return randomNumber;
    }

}

GameFrame.java

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

public class GameFrame extends JFrame implements ActionListener{
    private Game game;
    private Player player;
    private JTextField inputField;
    private JLabel gameAnswer, tries;

    public GameFrame(String title) {
        super(title);
        getContentPane().setLayout(new FlowLayout());
        setSize(300, 100);

        // Start game & add player
        game = new Game();
        player = new Player();

        addComponents();

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    private void addComponents() {
        JLabel tries = new JLabel("Forsøg: " + player.getTries());
        getContentPane().add(tries);

        inputField = new JTextField(8);
        getContentPane().add(inputField);

        JButton submitGuess = new JButton("Gæt tal");
        submitGuess.addActionListener(this);
        getContentPane().add(submitGuess);

        JLabel gameAnswer = new JLabel("Gæt et tal mellem 1-10");
        getContentPane().add(gameAnswer);
    }

    private void resetGame() {
        // Create new randon number & new player
        game = new Game();
        player = new Player();

        // Set default text in components
        gameAnswer.setText("Gæt et tal mellem 1-10");
        tries.setText("Forsøg: " + player.getTries());
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // Increment tries guessed
        player.addTry();
        tries.setText("Forsøg: " + player.getTries());


        // Extract number guessed
        String textEntered = inputField.getText();
        int numberEntered = Integer.parseInt(textEntered);

        // How was it compared to randomNumber?
        if (numberEntered == game.getRandomNumber()) {
            // CORRECT! - display optionpane
            JOptionPane.showMessageDialog(null, "TILLYKKE! Du gættede rigtigt! Du brugte: " + player.getTries() + " forsøg.");

            // Reset Game
            resetGame();

        } else if (numberEntered > game.getRandomNumber()) 
            // To high
            gameAnswer.setText("Forket! Du gættede for højt!");
         else if (numberEntered < game.getRandomNumber()) 
            // To low
            gameAnswer.setText("Forkert! Du gættede for lavt!");

        // Calculate result & display
    }

}

Main.java

public class Main {

    public static void main(String[] args) {
        new GameFrame("Gæt et tal");
    }
}

Player.java

public class Player {
    private int tries;

    public Player() {
        tries = 0;
    }

    public void addTry() {
        tries++;
    }

    public int getTries() {
        return tries;
    }
}
2
  • 1
    Please produce a small and descriptive code which makes you think that doesn't work. Reading the whole code isn't possible. Also tell us what is the error that you get in the console. Commented Aug 3, 2015 at 9:14
  • 4
    Hi, welcome to SO. Please, don't link to your code, insert a complete example in the question itself, so that if the link goes down, users will still be able to see the code. Commented Aug 3, 2015 at 9:15

1 Answer 1

1

You declared private JLabel gameAnswer, tries; as class fields but never initialize it, because in addComponents() method you declare and initialize new objects with:

JLabel tries = new JLabel("Forsøg: " + player.getTries());
JLabel gameAnswer = new JLabel("Gæt et tal mellem 1-10");

so you get NullPointerException. You need to declare it like:

tries = new JLabel("Forsøg: " + player.getTries());
gameAnswer = new JLabel("Gæt et tal mellem 1-10");

and it should work.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.