0

我刚开始学习java,我正在开发一个程序。我在这里遇到错误:

locationsOfCells = simpleDotCom.getLocationCells();

但我不确定错误是什么。日食说

无法 getLocationCells()从类型中对非静态方法进行静态引用simpleDotCom

有人可以帮我弄这个吗?我究竟做错了什么?

public class simpleDotCom {
    int[] locationsCells;

    void setLocationCells(int[] loc){
        //Setting the array
        locationsCells = new int[3];
        locationsCells[0]= 3;
        locationsCells[1]= 4;
        locationsCells[2]= 5;
    }

    public int[] getLocationCells(){

        return locationsCells;

    }
}

public class simpleDotComGame {

    public static void main(String[] args) {
        printBoard();
    }

    private static void printBoard(){
        simpleDotCom theBoard = new simpleDotCom();
        int[] locationsOfCells; 
        locationsOfCells = new int[3];
        locationsOfCells = theBoard.getLocationCells();

        for(int i = 0; i<3; i++){
            System.out.println(locationsOfCells[i]);
        }

    }

}
4

7 回答 7

3

问题是您正在调用该getLocationCells()方法,就好像它是一个静态方法,而实际上它是一个实例方法。

您需要首先从您的类中创建一个对象,如下所示:

simpleDotCom myObject = new simpleDotCom();

然后调用它的方法:

locationsOfCells  = myObject.getLocationCells();

顺便说一句,在 Java 世界中有一个广泛遵循的命名约定,其中类名总是以大写字母开头 - 您应该重命名您的类SimpleDotCom以避免混淆。

于 2012-09-07T12:15:22.757 回答
1
simpleDotCom obj = new simpleDotCom();
locationsOfCells = obj.getLocationCells();

你的班级名称也应该以大写字母开头

于 2012-09-07T12:23:11.483 回答
1

您正在尝试getLocationCells以静态方式。您需要先创建一个实例simpleDotCom

simpleDotCom mySimpleDotCom = new simpleDotCom();       
locationsOfCells = mySimpleDotCom.getLocationCells();

BTW 类名总是以大写字母开头。这将有助于消除将方法作为成员方法访问的混淆。

更新:

要从更新的静态方法访问,您还需要声明theBoardstatic变量:

static simpleDotCom theBoard = new simpleDotCom();
于 2012-09-07T12:16:07.370 回答
1

您正在尝试从 main 方法引用非静态方法。这在java中是不允许的。您可以尝试将 simpleDotCom 类设为静态,以便您可以访问该类的方法。

于 2012-09-07T12:19:04.477 回答
0

要么将 simpleDotCom 的字段和方法也设为静态,要么创建 simpleDotCom 的实例并访问该实例的方法。

于 2012-09-07T12:14:46.357 回答
0

您正在尝试从静态上下文访问普通的非静态方法,但它不起作用。

您可以从尝试访问: from 的例程中删除静态词,也可以通过在其声明中添加静态词来getLocationCells()制作静态词。getLocationCells()

于 2012-09-07T12:13:37.077 回答
0

您的代码还有更多错误。

  1. 非静态方法无法使用类名调用。所以尝试用对象调用 getLocationCells()。

    simpleDotCom obj=新的 simpleDotCom(); obj.getLocationCells()

  2. 接下来你会得到空指针异常。U 尝试在初始化之前打印 locationsOfCells 值。因此,在打印值之前尝试调用 setLocationCells() 方法。

  3. Ur 方法定义 void setLocationCells(int[] loc)。这里你有参数 loc 但你没有在方法块中使用任何地方。所以请注意处理方法参数。

于 2012-09-07T12:39:30.403 回答