Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法引用已声明的对象字段_Java_Object_Field_Main - Fatal编程技术网

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