-3

当我尝试使用移动即 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;
        }

    }   
4

2 回答 2

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)。

至于你的输出问题,因为这是一个单独的问题,你想为它发布一个单独的问题。

于 2013-10-25T22:14:52.967 回答
1

那是因为您将move方法定义为非静态方法,说public void要使其成为静态方法,您需要改为编写public static void

另请注意,变量名称是区分大小写的,如果你写Slide.move()你清楚地调用你Slide class,因为你的变量被命名slide

于 2013-10-25T22:14:15.697 回答