Java 无法引用已声明的对象字段
我有一个Java 无法引用已声明的对象字段,java,object,field,main,Java,Object,Field,Main,我有一个障碍物类,其中包含一个障碍物对象的构造函数: public class Obstacle { public String obstacleType; public int obstacleSize, obstacleXCoord, obstacleYCoord; public Obstacle(String getType, int getSize, int getXCoord, int getYCoord){ obstacleType =
障碍物
类,其中包含一个障碍物对象的构造函数:
public class Obstacle {
public String obstacleType;
public int obstacleSize, obstacleXCoord, obstacleYCoord;
public Obstacle(String getType, int getSize, int getXCoord, int getYCoord){
obstacleType = getType;
obstacleSize = getSize;
obstacleXCoord = getXCoord;
obstacleYCoord = getYCoord;
}
}
在另一个类中,我导入障碍
类并定义一个方法generateObstacle,创建一个名为新障碍
的新的障碍。我在这里还多次引用了不会引发任何错误的newbarriend
字段:
public static void generateObstacle(){
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
//randomly generates a 1 or 0
switch(spawnObstacle.nextInt(2)){
//if 0
case 0:
//newObstacle type is tree
newObstacle.obstacleType = "TREE";
break;
//if 1
case 1:
//newObstacle type is rock
newObstacle.obstacleType = "ROCK";
break;
}
//randomly generates 0, 1, or 2
switch(spawnObstacle.nextInt(3)){
//if 0
case 0:
//newObstacle size is 1
newObstacle.obstacleSize = 1;
break;
//if 1
case 1:
//newObstacleSize is 2
newObstacle.obstacleSize = 2;
break;
//if 2
case 2:
//newObstacle size is 3
newObstacle.obstacleSize = 3;
break;
}
}
等等。但是,在我的main(
)方法中,我无法引用newbarrier
或newbarrier
本身的任何字段:
public static void main(String[] args){
spawnPlayer();
while(runGame){
switch((playerInput.nextLine()).toUpperCase()){
case "W":
for(int x = 0; x < allExistingObstacles.size(); x++){
if(newObstacle.obstacleXCoord == currentXCoord){
}
}
抛出一个错误并说
无法将新障碍解析为变量
为什么我可以在代码的其他地方引用障碍字段,但不能在这里引用?您已经在生成障碍()中为障碍
类创建了对象。因此对象的范围在方法中
您不能使用它来引用声明它的块之外的变量您已经为生成障碍物()
中的障碍物
类创建了对象。因此对象的范围在方法中
您不能使用它来引用声明它的块之外的变量您已经为生成障碍物()
中的障碍物
类创建了对象。因此对象的范围在方法中
您不能使用它来引用声明它的块之外的变量您已经为生成障碍物()
中的障碍物
类创建了对象。因此对象的范围在方法中
您不能使用它来引用声明它的块之外的变量新障碍
的范围仅限于一个函数generateObstacle()
so define
static Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
在函数外部,以便引用(新障碍
)可以在全局范围内,并且可以在该类上的任何函数中访问
另外,由于@chrylis
指出了这一点,因此新障碍
应该是静态的
,以便在静态方法中可以访问。新障碍
的范围仅限于函数generateObstacle()
static Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
在函数外部,以便引用(新障碍
)可以在全局范围内,并且可以在该类上的任何函数中访问
另外,由于
@chrylis
指出了这一点,因此新障碍
应该是静态的
,以便在静态方法中可以访问。新障碍的范围仅限于函数generateObstacle()
static Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
在函数外部,以便引用(新障碍
)可以在全局范围内,并且可以在该类上的任何函数中访问
另外,由于
@chrylis
指出了这一点,因此新障碍
应该是静态的
,以便在静态方法中可以访问。新障碍的范围仅限于函数generateObstacle()
static Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
在函数外部,以便引用(新障碍
)可以在全局范围内,并且可以在该类上的任何函数中访问
另外,由于
@chrylis
指出了这一点,因此新障碍物
应该是静态的
,以便在静态方法中可以访问。在生成障碍物
中,它起作用,因为您有障碍物新障碍物=新障碍物(null,0,0,0)代码>在方法的开头
您main
缺少它。在generateObstacle
中,它可以工作,因为您有barrier newbarrier=new barrier(null,0,0)代码>在方法的开头
您main
缺少它。在generateObstacle
中,它可以工作,因为您有barrier newbarrier=new barrier(null,0,0)代码>在方法的开头
您main
缺少它。在generateObstacle
中,它可以工作,因为您有barrier newbarrier=new barrier(null,0,0)代码>在方法的开头
您main
缺少它。这是因为实例只存在于方法的范围内generateBSTACK
public static void generateObstacle(){
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
因此,在这个方法之外,变量newbarrier是不可见的
我想你需要返回这个实例
public static Obstacle generateObstacle(){
// ...
return newObstacle;
}
这是因为实例只存在于方法的范围内
public static void generateObstacle(){
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
因此,在这个方法之外,变量newbarrier是不可见的
我想你需要返回这个实例
public static Obstacle generateObstacle(){
// ...
return newObstacle;
}
这是因为实例只存在于方法的范围内
public static void generateObstacle(){
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
因此,在这个方法之外,变量newbarrier是不可见的
我想你需要返回这个实例
public static Obstacle generateObstacle(){
// ...
return newObstacle;
}
这是因为实例只存在于方法的范围内
public static void generateObstacle(){
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
因此,在这个方法之外,变量newbarrier是不可见的
我想你需要返回这个实例
public static Obstacle generateObstacle(){
// ...
return newObstacle;
}
问题在于main
上下文中的newbarrier
尚未初始化
您需要将其分配给生成障碍的结果:
public static void main(String[] args){
Obstacle newObstacle = generateObstacle();
// ...
}
您的generateObstacle
方法应该返回障碍:
public static void generateObstacle() {
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
// ...
return newObstacle;
}
问题在于main
上下文中的newbarrier
尚未初始化
您需要将其分配给生成障碍的结果:
public static void main(String[] args){
Obstacle newObstacle = generateObstacle();
// ...
}
您的generateObstacle
方法应该返回障碍:
public static void generateObstacle() {
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
// ...
return newObstacle;
}
问题在于main
上下文中的newbarrier
尚未初始化
您需要将其分配给生成障碍的结果:
public static void main(String[] args){
Obstacle newObstacle = generateObstacle();
// ...
}
您的generateObstacle
方法应该返回障碍:
public static void generateObstacle() {
Obstacle newObstacle = new Obstacle(null, 0, 0, 0);
// ...
return newObstacle;
}