Mr. Viggo
Mr. Viggo

Reputation: 69

Java Programming: I get a issue when I enter a number and check if the number is correct

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;
    }
}

Upvotes: 1

Views: 65

Answers (1)

m.cekiera
m.cekiera

Reputation: 5395

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.

Upvotes: 1

Related Questions