Java NullPointerException Когда я вызываю метод в пользовательском классе - PullRequest
0 голосов
/ 29 ноября 2009

Я получаю исключение нулевого указателя при вызове метода в пользовательском классе. Я не понимаю, почему мой объект p класса Player является нулевым. (Игрок - это класс Игроков моей игры) Игра - это метод. Этот класс должен создать n чисел p объектов класса Player и запустить на них метод play.

import java.util.*;
public class PsychicGameMore
{
    private ArrayList <Player> players;
    private int orginalNumber;
    private Player p; 

    public PsychicGameMore()
    {



        int n;
        Scanner s;
        s = new Scanner(System.in);
       System.out.println("How many players will there be?, Please enter a number");
       n = s.nextInt();
       players = new ArrayList<Player>(n);

        //for loop to create n number of Players 
        for(int i = 0; i < n; i++)
        {
           Player p;
            p = new Player();


            players.add(p);
        }

       orginalNumber =0;


    }

     public void play()
      {
        Random myRandom;
        myRandom = new Random();

    do 
    {
    orginalNumber = myRandom.nextInt(6)+1;
    System.out.println("The computer has choosen the number " + orginalNumber);
    p.play();

        if(orginalNumber == p.getGuessedNumber())
        {
        System.out.println(p.getName() + " has won!!!!!!!!!!!!!!!!");
        }

      } while((orginalNumber != p.getGuessedNumber()));


     }
}

Спасибо за любую помощь.

Ответы [ 4 ]

4 голосов
/ 29 ноября 2009

Вы назначаете довольно много Player с вашему массиву players, но вы никогда не присваиваете p. Обратите внимание, что в цикле:

   for(int i = 0; i < n; i++)
    {
       Player p;
        p = new Player();

        players.add(p);
    }

Местный p скрывает объект в объекте. Не ясно, какое значение вы хотите иметь на уровне объекта p, поэтому я не знаю, как исправить ваш код.

Вы также должны по-настоящему работать над поддержанием согласованности отступов вашего блока. Трудно следовать вашему коду как есть. Если вы используете Eclipse, исправьте его, выделив весь беспорядок и нажав Ctrl-I.

1 голос
/ 29 ноября 2009

Ваш код требует много работы, но это поможет вам пройти NPE. Проблема в том, что ваш личный член данных Player никогда не инициализируется.

package psychic;

import java.util.*;

public class PsychicGameMore
{
    private ArrayList<Player> players;
    private int orginalNumber;

    public static void main(String[] args)
    {
        PsychicGameMore game = new PsychicGameMore();
        game.play();
    }

    public PsychicGameMore()
    {
        int n;
        Scanner s;
        s = new Scanner(System.in);
        System.out.println("How many players will there be?, Please enter a number");
        n = s.nextInt();
        players = new ArrayList<Player>(n);

        //for loop to create n number of Players
        for (int i = 0; i < n; i++)
        {
            Player p;
            p = new Player();


            players.add(p);
        }

        orginalNumber = 0;
    }

    public void play()
    {
        Random myRandom;
        myRandom = new Random();

        boolean hasWon = false;
        do
        {
            orginalNumber = myRandom.nextInt(6) + 1;
            System.out.println("The computer has choosen the number " + orginalNumber);
            for (Player player : players)
            {
                player.play();

                if (orginalNumber == player.getGuessedNumber())
                {
                    System.out.println(player.getName() + " has won!!!!!!!!!!!!!!!!");
                    hasWon = true;
                }

            }
        } while (!hasWon);
    }
}
0 голосов
/ 29 ноября 2009

Ваш атрибут класса private Player p не создан, поэтому при вызове p.play() в методе play() вы получаете NPE. Создайте private Player p, прежде чем позвонить p.play().

0 голосов
/ 29 ноября 2009

р на

p.play();

равно нулю. Вы никогда не создаете это. Единственные примеры инициализации Player - это те, которые вы добавляете в коллекцию ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...