2012-09-07 28 views
0

我刚开始学习java,我正在开发一个程序。我在这里得到一个错误:无法更正我的java程序

locationsOfCells = simpleDotCom.getLocationCells(); 

但我不知道错误是什么。 ECLIPSE说

不能使静态参考非静态方法 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]); 
     } 

    } 

} 
+0

简单的解决方法是,定义方法'static'或创建主simpleDotCom'的'一个对象,然后调用'obj.getLocationCells()” –

回答

3

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

您需要首先从你的类创建一个对象是这样的:

simpleDotCom myObject = new simpleDotCom(); 

,然后调用它的方法:

locationsOfCells = myObject.getLocationCells(); 

顺便提一下,在广泛遵循命名约定在Java世界中,类名始终以大写字母开头 - 您应该将类​​重命名为SimpleDotCom以避免混淆。

+0

我改变了我刚刚编辑的新代码,但我仍然在'locationsOfCells = theBoard.getLocationCells();上得到错误;'错误是'无法对非静态字段进行静态引用theBoard' –

+0

您需要移动在printBoard()方法中创建board的行,那么它应该可以工作 – codebox

+0

我明白了,非常感谢您的帮助。 –

0

您试图从静态上下文访问正常的非静态方法,它不起作用。

您可以从例程中删除静态字,您可以通过在其声明中添加静态字来访问:getLocationCells()静态字,或者使getLocationCells()静态。

+0

哦的帮助表示感谢。我正在阅读的这本书还没有谈论静态。 –

+0

,但当我添加一个静态getLocationCells()它说给我一个错误,当我返回locationsCells; Eclips给我这个错误'不能静态引用非静态字段locationsCells' –

+0

尝试使locationsCells静态太。 – CloudyMarble

0

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

1

您试图以静态方式登录getLocationCells。您需要先创建一个simpleDotCom的实例:

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

顺便说一句,类名总是以大写字母开头。这将有助于消除作为成员方法访问方法的困惑。

更新:

要从更新后的静态方法来访问,你需要声明theBoardstatic变量也:

static simpleDotCom theBoard = new simpleDotCom(); 
+0

我改变了我刚刚编辑的一个新的代码,但我仍然收到'locationsOfCells = theBoard.getLocationCells();错误;'错误是'不能对非静态字段进行静态引用theBoard' –

+0

您正在访问来自静态方法的变量。要解决,请参阅我的更新。 – Reimeus

+0

哦,非常感谢。 –

1

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

1
simpleDotCom obj = new simpleDotCom(); 
locationsOfCells = obj.getLocationCells(); 

,也是你的类名应以大写字母

+0

我改变了我刚刚编辑过的新代码,但我仍然在位置错误locationOfCells = theBoard.getLocationCells();错误是无法对非静态字段进行静态引用theBoard' –

0

你的代码开始有一些更多的错误。

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

    simpleDotCom obj = new simpleDotCom(); obj.getLocationCells()

  2. 接下来,你将得到空指针异常。 ü尝试在初始化之前打印locationsOfCells值。因此,在打印值之前,请尝试调用setLocationCells()方法。 Url方法定义void setLocationCells(int [] loc)。这里你有参数loc,但是你没有在方法块中的任何地方使用。所以请注意处理方法参数。