java - 创建对象数组但找不到符号

标签 java arrays object instance

我正在 Java 的迷你游戏中创建一系列玩家。有一个名为 Players 的类和一个名为 Game 的类。

Main中,我们扫描两个名字并将它们发送到Game
game.createPlayer(name1, name2);
然后尝试获取一些信息
playerArray[(game.getPlayerTurn() % 2)].getPlayerName();

PlayerGame 中构建为数组:

public class Game
{
private Player[] playerArray;
[...]
public void createPlayer(String name1, String name2)
  {
    Player[] playerArray = new Player[2];        
    playerArray[0] = new Player(name2);           
    playerArray[1] = new Player(name1);
  }

Player作为标准类:

public class Player
{
  private String playerName;

  public Player( String playerName )
  {
    this.playerName = playerName;
  }
  public String getPlayerName()
  {
    return playerName;
  }
}

然而,这会返回多个错误,表示无论我尝试查找玩家的姓名,它都无法找到该符号。我没有正确实例化它们吗?

附加代码(根据请求):

package oop.nimspiel;

import java.util.Scanner;
import java.util.Arrays;

public class Game
{

  private int take;
  private int turn;
  private int playerTake;
  private int playerTurn;
  protected Player[] playerArray;

  public Game(int turn, int playerTurn)
  {
    this.turn = turn;
    this.playerTurn = playerTurn;
  }

  protected void setPlayerTake(int take)
  {
    this.playerTake = take;
  }

  public int getPlayerTake()
  {
    return playerTake;
  }

  public void incrementTurns()
  {
    turn = turn + 1;
    playerTurn = playerTurn + 1;
  }

  public int getTurn()
  {
    return turn;
  }

  public int getPlayerTurn()
  {
    return playerTurn;
  }

  public void createPlayer(String name1, String name2)
  {
    this.playerArray = new Player[2];
    playerArray[0] = new Player(name2);
    playerArray[1] = new Player(name1);
  }

  public String getPlayer()
  {
    String playerName = playerArray[(getPlayerTurn() % 2)].getPlayerName();
    return playerName;
  }

  public void checkTake(int take)
  {
    Scanner input = new Scanner(System.in);

    this.take = take;
    boolean rightInput = false;

    do {

      if (take < 1 || take > 3)
      {
        System.out.println("Your input was wrong, please use a number between 1 and 3.");

        System.out.println("How many stones would you like to take?");
        take = input.nextInt();

        rightInput = false;

      }

      else if (stoneheap.getStones() < take) {
        System.out.println("There are only " + stoneheap.getStones() + " stones left.");
        System.out.println("Please take less.");

        System.out.println("How many stones would you like to take?");
        take = input.nextInt();

        rightInput = false;
      }

      else
      {
        rightInput = true;
      }

    } while (rightInput == false);
  }

}

和主要部分:

package oop.nimspiel;

import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;

public class Main
{

  private int take;

  public static void main(String[] args)
  {

    Scanner input = new Scanner(System.in);

    String nextRound;

    do
    {

      int maxPlayers = 2;
      int startTurn = 1;
      Game game = new Game ( startTurn, (1 + (int)(Math.random() * ((maxPlayers - 1) + 1)) ) );

      int minStones = 20;
      int maxStones = 30;
      Stoneheap stoneheap = new Stoneheap((minStones + (int)(Math.random() * ((maxStones - minStones) + 1)) ) );

      System.out.println("Rules: Two players take stones from a heap of 20 to 30 until there are no more left. The one to take the last stone loses. Each round you can only take between 1 - 3 stones. Have fun!");   // Rules

      System.out.println("");

      System.out.println("Hello Player 1, what is your name?");
      String name1 = input.next();

      System.out.println("");

      System.out.println("Hello Player 2, what is your name?");
      String name2 = input.next();

      game.createPlayer(name1, name2);

      System.out.println("");

      System.out.println("Number of stones: " + stoneheap.getStones());

      System.out.println("The first to draw is Player " + game.getPlayerTurn());

      System.out.println("The game starts now!");

      while (stoneheap.getStones() > 0)
      {
        if ((game.getPlayerTurn() % 2) > 0)         // Turn Player 1
        {
          System.out.println("It is your turn " + playerArray[(game.getPlayerTurn() % 2)].getPlayerName() + ".");
          System.out.println("How many stones would you like to take?");

          int take = input.nextInt();

          game.checkTake(take);

          game.setPlayerTake(take);
          stoneheap.currentStones();

          System.out.println("There are  " + stoneheap.getStones() + " stones left.");

        }

        else    // Turn Player 2
        {
          System.out.println("It is your turn " + playerArray[(game.getPlayerTurn() % 2)].getPlayerName() + ".");
          System.out.println("How many stones would you like to take?");

          int take = input.nextInt();

          game.checkTake(take);

          game.setPlayerTake(take);

          stoneheap.currentStones();

          System.out.println("There are  " + stoneheap.getStones() + " stones left.");

        }

        game.incrementTurns();
      }

      System.out.println("The game has ended and the winner is ...");
      System.out.println(playerArray[(game.getPlayerTurn() % 2)].getPlayerName());

      System.out.println("It took " + (game.getTurn() - 1) + " turns." );

      System.out.println("");


      System.out.println("Do you want to play another round? Y for yes, anything else for no");

      String userInput = input.next();

      nextRound = userInput.toUpperCase();

    } while (nextRound.equals("Y"));

  }

}

最佳答案

createPlayer 方法中,您应该通过 this 关键字 (this.playerArray = new Player[2]) 访问 playerArray

当前您正在动态创建一个数组,并且类变量未受影响,这就是您收到异常的原因。

public class Game
{
private Player[] playerArray;
[...]
public void createPlayer(String name1, String name2)
  {
    this.playerArray = new Player[2];        
    playerArray[0] = new Player(name2);           
    playerArray[1] = new Player(name1);
  }

关于java - 创建对象数组但找不到符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55682605/

相关文章:

Java OpenGL - 线框和实体模式

Java getClass().equals() 比较

javascript - 从此对象中选择特定属性值时遇到问题

java - 在Java中创建一个对象并通过传递参数来初始化它

java - 通过交换染色体重组创建新的基因型

java - 为什么在paint或paintComponent方法中语句被执行多次?

arrays - 如何在 Ruby 中手动将整数转换为 IP 地址

arrays - For Next 循环中每次迭代 VBS 中的新数组

c++ - 初始化对象数组中的 vector 大小

java - 错误:找不到方法实现()