gpt4 book ai didi

java - 无法从静态上下文引用非静态变量 arr

转载 作者:行者123 更新时间:2023-12-02 06:28:33 25 4
gpt4 key购买 nike

我已经阅读了有关范围和控制访问的 Oracle 文档,但它只是没有坚持下去,所以我假设我的问题来自于我未能理解......无论如何,这是我的代码。我正在尝试使用 Player 类中的方法访问在数组中创建的唯一 Player 对象,并更改其唯一变量(例如余额)。欢迎任何解决方案,特别是解释!

public class Player
{
private int currentBal;
private String myName;
private int rollOne;
private int rollTwo;
private int rollTotal;
private int doublesCount;
private int currentPosition;
private int currentDoubles;
private int move;
private int moveMult;
private int newBal;
private boolean rollAgain;
private boolean inJail;
public Player(String userName, int changeInMoney)
{
myName = userName;
currentBal -= changeBalance(changeInMoney);
}

public int changeBalance(int changeInMoney){newBal -= changeInMoney; return newBal;}

public int viewBalance(){return currentBal;}

这是我的 PlayerArray 类。

public class PlayerArray
{
Scanner scan = new Scanner(System.in);
private int numbHuman;
private Player[] arr;
private String[] userName;
private int startingMoney;
public PlayerArray()
{
Scanner scan = new Scanner(System.in);
System.out.println("There will be 4 players, how many do you wish to be human? 0><4");
numbHuman = scan.nextInt();
while (numbHuman < 1 || numbHuman > 4)
{
System.out.println("Invalid entry, try again.");
numbHuman = scan.nextInt();
}
arr = new Player[numbHuman];
userName = new String[numbHuman];
startingMoney = 1500;
for(int i = 0; i < arr.length; i++)
{
System.out.println("Player " + (i + 1) + ", Please enter your first name:");
userName[i] = scan.next();
arr[i] = new Player(userName[i],startingMoney);
}
}

public Player[] getPlayerArray()
{
int charge = 500;
arr[0].changeBalance(charge);
System.out.println(arr[0].viewBalance()); //look here as example
return arr;
}
}

这是我的玩家类,减去一些我稍后才能使用的方法。波纹管是我调用它的主要方法,

import java.util.Scanner;
import java.util.Random;
public class Launcher
{
private Planet myTest;
private PlanetInfo myPlanetInfo;
private static Player[] arr;
public static void main(String[] args)
{
Launcher testLauncher = new Launcher();
PlayerArray myArray = new PlayerArray();
Pay myCharge = new Pay(); // continue work on charges
myArray.getPlayerArray();
//STILL TRYING TO GET BELLOW LINE TO WORK LAST NIGHT!!!
int testBal = arr[0].viewBalance(); //ERROR HERE
System.out.println("player 1's balance: " + testBal);
}
}

错误“Java.lang.NullPointerException:null”

最佳答案

您的 main 方法是静态方法。它实际上在从类创建任何对象之前就存在,因此无法直接访问实例变量和方法。除非您为该类创建一个对象,否则无法访问同一类中的非静态方法或变量,即 Launcher launcher = new Launcher();

在这种情况下,您的玩家数组 arr 不是静态的。您需要使其静态或创建一个 Launcher 对象并从那里访问该变量。在后一种情况下,您需要将 arr 数组公开。

第一个选项要求您将玩家数组声明更改为 private static Player arr;

第二个要求您将 arr 数组的访问权限更改为公共(public),并像这样访问它:launcher.arr

关于第二个错误,您需要执行以下操作:arr = myArray.getPlayerArray();或者直接访问数组,如下所示:myArray.getPlayerArray()[0](对于该数组中的第一项)。

关于java - 无法从静态上下文引用非静态变量 arr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com