2013-05-10 48 views
1

我正在一個學校項目,建設一個國際象棋遊戲。我有我的董事會,創建陣列並用棋子填充棋盤。我有靜態主要方法和輸入非靜態值的問題

現在,我想在遊戲類中實例化一個新的棋盤,並使用控制檯輸入棋手動作。爲了儘可能簡單,我的麻煩是輸入非靜態變量。

例如:

public class Test extends ConsoleProgram{ 

public static double a1; 

public static void main(String[] args) { 
    a1 = readLine("Insert value of a1"); 
    System.out.println(a1); 
} 
} 

more info on readLine() here

正如您可能看到,這不會爲java工作抱怨cannot make static reference to the non-static method readLine()

如何解決此問題?也許有一些真正基本的東西我只是不明白..

一如既往,非常感謝您的快速和有見地的答案!

+0

你爲什麼不只是讓'的readLine()'靜態?此外,由於您沒有顯示相關代碼('readLine()'),所以不可能回答您的問題。 – home 2013-05-10 11:21:45

+0

aha,我會嘗試編輯它!謝謝 – tore 2013-05-10 11:22:26

+0

而且,如果您真的在測試您的代碼,請使用JUnit。它會得到回報。 – 2013-05-10 11:24:47

回答

2

如果你不想讓你的ReadLine方法靜態的,做一個實例調用:

public static void main(String[] args) { 

    Test me = new Test(); 

    a1 = me.readLine("Insert value of a1"); 

    System.out.println(a1); 

} 
+0

嘿!我的腦子開始融化,試圖理解正在發生的事情。爲什麼這是好的?你能向我解釋一下我是怎麼回事嗎?非常感謝! – tore 2013-05-10 11:36:14

+1

@tore - 「測試」是你班級的名字。當你在那個類中定義一個方法而沒有將它標記爲「靜態」時,它就成爲一個實例方法。這意味着如果您有一個類的實例(即「對象」),則只能調用它。 'new Test()'創建你的類的一個實例(它將包含你可能定義的任何非靜態字段)。我們將該實例的「參考」分配給「me」(當然,也可以是「aardvark」)。現在我們可以使用'me'來引用那個實例,然後'me.readLine'引用實例方法。 – 2013-05-10 15:14:27

+1

@tore - (這些都是非常基礎的「面向對象」的概念,你需要找到一個可以以有組織的方式學習它們的參考 - 這不是你應該在街道上「拾取」的東西。) – 2013-05-10 15:15:57

1

readLine()`爲static.Then你可以訪問

如果你做的方法靜態的,那麼你可以使用在main()方法

否則創建測試類的對象,然後用它

1

我找到的最簡單的工作就是在main方法中實例化對象,並從構造函數中調用相關的方法。

public static void main(String[] args) 
{ 
    new ClassThing(); 
} 

public ClassThing() 
{ 
    // Make your method calls here. 
} 

這意味着您可以訪問實例方法,你不需要調用一切從static context

2

要麼定義readlinestatic

使類的一個對象,然後調用該方法,new Test().readline();

+0

嘿!你說什麼課?主要方法的類?謝謝! – tore 2013-05-10 11:33:48

+0

@tore不,使用readLine()方法的類 – Ankit 2013-05-10 11:42:42

1

創建Test實例並調用它的實例方法。

public class Test extends ConsoleProgram { 
    public double a1; 

    public void run() { 
     a1 = readLine("Insert value of a1"); 
     System.out.println(a1);  
    } 

    public static void main(String[] args) { 
     Test main = new Test(); 
     main.run(); 
    } 

} 
+0

謝謝您的意見!你能告訴我爲什麼你使用run()方法嗎?這是一件特別的事,還是你可以將它命名爲別的東西? – tore 2013-05-10 11:30:07

+0

'run'這個名字是任意的。你可以選擇任何方法名稱。該方法也可以是「私人」的。 – rzymek 2013-05-10 11:48:54

1

您應該實例化具有方法readLine()的類的對象。

如果該類的名字即Reader你應該這樣做:

Reader r= new Reader(); 
a1 = r.readLine("Insert...");`