2015-04-04 122 views
0

我正在使用BlueJ IDE。我有一個名爲ProgramOne的主類,另一個類StarTurtle(旨在用於實例方法)。Java代碼未執行實例方法

這裏是ProgramOne代碼:

public class ProgramOne 
{ 
    public static void main (String[ ] args) 
    { 
      StarTurtle turtle1 = new StarTurtle(5); 
      turtle1.StartTurtle(); 

     } 
    } 

這裏是StarTurtle代碼:

public class StarTurtle 
{ 

private int points;  

public int StartTurtle(int x) 
{ 
points = x; 

Turtle sue; 
sue = new Turtle(); 
sue.paint (90, 40); 

} 

} 

(該turtle方法中,你看到的是從我這裏沒有粘貼其他兩個班這些類可在http://www.cs.ccsu.edu/~jones/book.htm手冊中找到)

該代碼僅編譯,並且在那裏是沒有選擇執行。但是,沒有選擇執行void main (String[ ] args),應該有執行主類。有誰知道這是什麼原因?我假設代碼本身存在問題。

編輯:當我的意思是「選項,執行」,我指的是此BlueJ的功能:

BlueJ

編輯:更改其中提多書和R邊緣所描述的方式的代碼(在答案和答案的評論中)修正了StarTurtle班,但主班ProgramOne仍然沒有執行。

+0

你是什麼意思與「選項執行」? – specializt 2015-04-04 23:14:30

+0

呃......你在屏幕截圖中顯示了你自己問題的解決方案...... – specializt 2015-04-04 23:24:58

+1

'StarTurtle'沒有任何需要int的構造函數,'public int StartTurtle(int x)'是一個方法不是一個構造函數,並且您正在從沒有任何參數的'main'方法調用它,因爲它是這樣的,此代碼不會編譯。 – Titus 2015-04-04 23:25:10

回答

4

所以......我之前並不熟悉BlueJ,但是我只是下載它並創建了我們一直在暗示的代碼。它現在看起來像這樣。

ProgramOne.java

public class ProgramOne 
{ 
    public static void main (String[ ] args) 
    { 
      StarTurtle turtle1 = new StarTurtle(); 
      turtle1.StartTurtle(5); 

    } 
} 

StarTurtle.java

public class StarTurtle 
{ 

    private int points;  

    public void StartTurtle(int x) 
    { 
     points = x; 

     Turtle sue; 
     sue = new Turtle(); 
     sue.paint (90, 40); 

    } 

} 

這段代碼的上下文菜單看起來酷似一個在原來的問題:

enter image description here

的菜單項讀取void main(String[] args)彈出一個對話框,如下所示:

dialog

如果我打的OK按鈕我似乎得到了一個名爲「海龜圖」窗口,其中包含一條垂直線。

我改變了StartTurtle(int)方法如下:

public void StartTurtle(int x) 
    { 
     points = x; 

     Turtle sue; 
     sue = new Turtle(true, 200,90); 
     sue.sleep(1000); 
     sue.say("Something"); 
     sue.sleep(1000); 
     sue.paint (90, 40); 
     sue.sleep(1000); 
     sue.fillCircle(5); 
     sue.sleep(1000); 
     sue.fillBox(10, 20); 

    } 

} 

這修改後的代碼顯示消息,垂直線,圓圈,然後在1秒的間隔的矩形。

我只能從中得出結論,代碼現在是有效的,您應該通過選擇void main(String{} args)的菜單項來執行它。

+0

我會如何使全局龜,以便它可以在主類中聲明,然後在方法中使用? – seanlevan 2015-04-09 03:09:21

+0

我不明白你的意思是全球。 Java是面向對象的,所以全局的概念有點陌生。你能解釋一下你想做什麼嗎? – redge 2015-04-09 03:16:27

+0

你說得對,Java是我第一次寫OO編程 - 當我指全局時,我的意思是聲明一個變量,其範圍可以從任何類訪問。 @redge – seanlevan 2015-04-09 07:23:49

0

變化

public int StartTurtle(int x)

這個

public StartTurtle(int x)

你寫過有關StartTurtl類:

旨在成爲一個實例方法

我的問題是 - 什麼是instance method ??

+0

實例方法是非靜態方法 - 它們需要單個實例。 – specializt 2015-04-04 23:28:07

+0

謝謝,我只是反對這樣的方法,只是方法。 – Antoniossss 2015-04-04 23:29:11

+0

仍然不起作用 - 我在原來沒有執行後添加了'int'。 – seanlevan 2015-04-04 23:30:48

1

StarTurtle沒有任何構造函數接受一個int,

public int StartTurtle(int x) 

是一種方法不是一個構造函數和你從main方法調用它不帶任何參數,因爲它是,這個代碼韓元不會編譯。

您可以將代碼更改爲像這樣的東西。

public static void main (String[ ] args) { 
     StarTurtle turtle1 = new StarTurtle(); 
     int result = turtle1.StartTurtle(5); 

} 

要遵守Java約定,您應該考慮使用小寫啓動方法名稱。

+0

我知道camel-casing,但我所採用的課程並不需要甚至不問。 – seanlevan 2015-04-04 23:37:17

+0

謝謝您的回答,但代碼仍然不會執行。 – seanlevan 2015-04-04 23:39:06

+0

@seanlevan我沒有用戶BlueJ,但可能執行的選項不會顯示,因爲您的代碼無法編譯,從您發佈的代碼中沒有其他問題是明顯的。 – Titus 2015-04-04 23:43:42