2013-10-25 105 views
-3

當我嘗試使用移動即Slide.move(1,0)我得到的錯誤:非靜態方法move(int,int )不能從靜態上下文中引用非靜態方法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; 
     } 

    } 
+1

主要是哪一行代碼導致出現。我想知道,如果它的編譯器錯誤在主要方法中,你沒有向我們展示 –

+1

你是否從'main'方法中調用這個方法?如果是,那麼你必須在'main-me之間創建一個'static-reference' thod'和這個'方法'。 – Tdorno

+0

或者main可以創建一個類的實例並調用實例上的移動。 –

回答

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

至於你輸出的問題,因爲這是一個單獨的問題,你想發佈一個單獨的問題吧。

+0

我的代碼中沒有任何靜態方法...我只是編輯第一篇文章的所有代碼來向你展示...? – Jay

+0

然後,您將它稱爲'Slide.move(...)',正如我之前所說的那樣。你需要閱讀鏈接的教程。 –

+0

我看到你的編輯。當然,您需要清楚地指出導致該錯誤的行,以便您的編輯有用。 –

1

那麼這是因爲你說public void定義的move方法作爲非靜態方法,使其靜態,你需要寫public static void代替。

另請注意,變量名稱區分大小寫,如果您編寫Slide.move(),則明確請求您的Slide class,因爲您的變量名爲slide

相關問題