无法从静态上下文(Java)引用非静态方法
我对编程比较新,并且在从ant类调用floor类时,不断获得无法从静态上下文引用的非静态方法。我已经删除了所有的静态数据,仍然会出现这个错误,如果有人能给我指出正确的方向,或者让我知道问题是什么,那就太好了,谢谢无法从静态上下文(Java)引用非静态方法,java,static,non-static,Java,Static,Non Static,我对编程比较新,并且在从ant类调用floor类时,不断获得无法从静态上下文引用的非静态方法。我已经删除了所有的静态数据,仍然会出现这个错误,如果有人能给我指出正确的方向,或者让我知道问题是什么,那就太好了,谢谢 public class Ant { public final int RED = 0, BLUE = 1, NORTH = 0, EAST = 1, SOUTH = 2, WEST = 3; public int color; p
public class Ant {
public final int RED = 0, BLUE = 1, NORTH = 0,
EAST = 1, SOUTH = 2, WEST = 3;
public int color;
public Ant(int size, int dir) {
size = size;
dir = startDir;
floor floor = new floor(size);
}
public int getRow() {
return row;
}
public int getCol() {
return col;
}
public void makeMoves(int numMoves, int dir) {
final int[][] offSet = {/* NORTH */ {-1, 0},
/* EAST */ {0, 1},
/* SOUTH */ {1, 0},
/* WEST */ {0,-1}};
final int[][] newDir = {/* NORTH */ {WEST, EAST},
/* EAST */ {NORTH, SOUTH},
/* SOUTH */ {EAST, WEST},
/* WEST */ {SOUTH, NORTH}};
//set start row, col, and direction
row = col = size/2;
for(int move = 1; move <= numMoves; move ++) {
//make a move based on direction
row = row + offSet[dir][0];
col = col + offSet[dir][1];
//turn based on color of new tile and direction
color = floor.getTileColor(row, col);
dir = newDir[dir][color];
//change color of current tile
floor.changeTileColor(row, col);
}
}//End of makeMoves
}//End Ant class
public class floor {
int [][] grid;
public floor(int size) {
grid = new int[size][size];
}
public int getTileColor(int row, int col) {
return grid[row][col];
}
public void changeTileColor(int row, int col) {
int color = grid[row][col];
}
}
公共类蚂蚁{
公共最终整数红色=0,蓝色=1,北部=0,
东=1,南=2,西=3;
公共int颜色;
公共蚂蚁(int-size,int-dir){
大小=大小;
dir=startDir;
地板=新地板(尺寸);
}
public int getRow(){
返回行;
}
公共int getCol(){
返回列;
}
公共void makeMoves(int numMoves,int dir){
最终int[][]偏移量={/*NORTH*/{-1,0},
/*东*/{0,1},
/*南方*/{1,0},
/*西*/{0,-1}};
最终int[][]newDir={/*北*/{西,东},
/*东*/{北,南},
/*南*/{东,西},
/*西*/{南,北};
//设置起始行、列和方向
行=列=大小/2;
对于(int move=1;move,该代码由于其他原因无法编译。例如,在此构造函数中,未定义startDir。虽然定义了大小,但这不起任何作用。它将参数大小分配给自身。您确实需要此参数。size=size
public Ant(int size, int dir)
{
size = size;
dir = startDir;
另外,行和列在任何地方都没有定义。如果您在静态方面遇到错误,我想知道您是否在编译旧代码。该代码由于其他原因没有编译。例如,在此构造函数中,没有定义startDir。虽然定义了大小,但这不起任何作用。它会将参数大小分配给自身。您真的希望这个。大小=大小
public Ant(int size, int dir)
{
size = size;
dir = startDir;
另外,行和列在任何地方都没有定义。如果您在静态方面遇到错误,我想知道您是否在编译旧代码。publicstaticvoidmain()
是一个静态上下文。它只有一个,而从技术上讲有一个是makeMoves()
,例如,对于每个Ant
对象。在Ant
的实例上调用它们,或者使它们也成为静态的
。这就是要点,只需查找关键字static
,和/或上下文,即可了解更多信息。公共静态void main()
是一个静态上下文。它只有一个,而从技术上讲,只有一个makeMoves()
,例如,对于每个Ant
对象。在Ant
的实例上调用它们,或者让它们也成为静态的
。这就是要点,只需查找关键字static
,和/或上下文,就可以了解更多信息。正如其他人所指出的,您正在编译的代码似乎与您发布的代码不匹配,因为posted代码包含除静态访问之外的其他错误
然而,我认为你的基本问题(至少就它所提出的问题而言)你认为你已经在Ant
类中为地板定义了一个实例变量,而实际上你没有。你只是在Ant
构造函数中为它定义了一个局部变量,一旦构造函数返回,它就会被丢弃
然后,由于floor
类本身与您可能认为是保持Ant的floor的变量之间存在命名冲突,因此您尝试调用floor.changeTileColor
,认为它将在Ant的floor实例上调用,但它编译时就像是对静态方法的引用一样。这是因为这里的floor
指的是类floor
本身,而不是包含实例的变量
要解决此问题,请在Ant
类中创建一个floor
实例变量,而不是仅在构造函数中创建一个实例变量(不过,建议使用另一个名称,以避免更多命名冲突).正如其他人所指出的,您正在编译的代码似乎与您发布的代码不匹配,因为发布的代码包含除静态访问之外的其他错误
然而,我认为你的基本问题(至少就它所提出的问题而言)你认为你已经在Ant
类中为地板定义了一个实例变量,而实际上你没有。你只是在Ant
构造函数中为它定义了一个局部变量,一旦构造函数返回,它就会被丢弃
然后,由于floor
类本身与您可能认为是保持Ant的floor的变量之间存在命名冲突,因此您尝试调用floor.changeTileColor
,认为它将在Ant的floor实例上调用,但它编译时就像是对静态方法的引用一样。这是因为这里的floor
指的是类floor
本身,而不是包含实例的变量
要解决此问题,请在Ant
类中创建一个floor
实例变量,而不是仅在构造函数中创建一个实例变量(不过,建议使用另一个名称,以避免更多命名冲突).哪一行出现错误?请显示导致错误的代码行。@hexafraction:我觉得不是这样。他问这个问题似乎是因为他认为自己没有任何静态代码,而不是因为他想知道为什么不能从静态代码调用非静态代码。@Dolda2000 floor.changeTileColor(row,col);对我来说似乎是静态的。对CV IMHO来说也足够了。@hexafraction:我不是说他是对的,我只是说这是他问的意图。:)哪一行出现了错误?请显示导致错误的代码行。@hexafraction:对我来说似乎不是这样。他似乎是在问,因为他是这样做的