当我尝试使用移动,即Slide.move(1,0)时,我得到错误:非静态方法move(int,int)无法从静态上下文引用
这是我目前的代码,我不知道什么是错的。
public void move(int row, int col) {
char [][] temp= new char [cells.length][];
for (int i= 0; i< cells.length; i++) {
int destRow = (i+row)%cells.length;
temp[destRow] = new char [cells[i].length];
for (int j= 0; j < cells[i].length; j++)
temp[destRow][(j+col)%cells[i].length] = cells[i][j];
}
cells= temp;
}
}
答案 0 :(得分:3)
错误意味着它所说的内容。
您的move
方法不是静态的。它需要调用一个对象的实例,例如:
Slide s = new Slide();
s.move(...);
你正在调用静态上下文,即没有this
的地方,也许是另一种静态方法,或直接通过Slide.move(...)
。你不需要这样做。
这些失败:
Slide.move(...); // error: move requires an instance
// and
class Slide {
void move (...) {
...
}
static void method () {
move(...); // error: method is static, there is no instance
}
}
这些不会失败:
Slide s = new Slide();
s.move(...);
// or
class Slide {
void move (...) {
...
}
void method () {
move(...);
}
}
// or
class Slide {
static void move (...) {
...
}
static void method () {
move(...);
}
}
所以要么从非静态上下文中调用它,要么使它成为静态方法。
至于推荐某个地方阅读更多关于这些内容(你在评论中提到的内容),请尝试http://docs.oracle.com/javase/tutorial/上的官方Java教程(看看“学习Java语言”的路径(特别是: http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)。
至于你的输出问题,因为这是一个单独的问题,你想为它发布一个单独的问题。
答案 1 :(得分:1)
那是因为您将move
方法定义为非静态方法,方法是public void
将其设为静态,而是需要编写public static void
。
另请注意,变量名称区分大小写,如果您写Slide.move()
,则明确调用Slide class
,因为您的变量名为slide
。