2014-02-24 71 views
0

爲了使這個程序運行,我必須從Shape類和矩形類中導入「derp」方法。但無論我自己或導師嘗試什麼,我們都無法使其工作。我實際需要完成的是Shape的「derp」方法需要能夠在Rectangle中工作。但是,導入這一方法的任務讓我們難倒了。在Java中導入一個類?

public abstract class shape{ 

    shape(){ 

    } 
    shape(int length, int width, int thing){ 
     length = 0; 
     width = 0; 
    } 
    public int derp(int thing, int length) { 
     thing = (int) Math.random() * 9 ; 
     length = thing; 
     return length; 
    } 
} 

public class Rectangle extends shape { 

public static void main(String args[]) 
{ 
     shape.getLength(Length, Width); 
      //r1 will take all default value 
Rectangle r1 = Rectangle();   

//r2 will take all supplied value 
Rectangle r2 = Rectangle(4, 5); 

//r3 will take supplied length. width will take default value 
Rectangle r3 = Rectangle(10);  

//r4 will take the same value of r2 
Rectangle r4= r2;   

//the rest of the code 
} 
private static void Rectangle(int width2, int length2) { 
    // TODO Auto-generated method stub 

} 

}

+0

爲什麼形狀延伸矩形?似乎有點落後。 – FatalError

+0

第一眼看起來像矩形應該延伸形狀,而不是其他方式 – markg

+0

感謝您指出。現在我只需要從Rectangle方法中的Shape中使用「Derp」方法。那可能嗎? – user3348422

回答

0
  1. Rectangle.derp(int thing, int length, int width);

    這不是一個方法聲明。這個語法全錯了。您是否試圖將derp聲明爲可以使用的方法,或者您是否想要撥打derp?作爲讀者,這是不清楚的。

  2. 邏輯上,Rectangle應該延伸Shape,而不是相反。

  3. 這並不做任何事情:

    shape(int length, int width, int thing){ 
        length = 0; 
        width = 0; 
    } 
    

    你只是參數分配給不同的值。

休息一下,花一些時間學習Java的語法。

+0

我需要做的就是使用Rectangle中Shape的「Derp」方法。 Derp是爲了讓我能夠使用其他代碼而獲得的價值。我需要使這個特定的方法起作用,以便我可以編寫程序的其餘部分。 – user3348422

+0

對你來說「不幸」,Java是一種編譯語言。在繼續之前,您將不得不修復所有錯誤(但不一定是警告)。這就是爲什麼你現在應該花時間學習語法。 –

0

Rectangle應該延伸Shape,而不是相反。

而且刪除此行

Rectangle.derp(int thing, int length, int width); 
+0

好的。擴展已被修復,線路已被移除。有關如何將方法導入Shape和進入Rectangle的任何想法? – user3348422

2

在我看來,像你應該扭轉繼承。它應該是矩形形狀延伸,由於矩形形狀

EDIT 1 當反向繼承你應該能夠調用DERP方法上矩形。

RectAngle r = new Rectangle(); 
    r.derp(thing, length); 

EDIT 2 你真的不應該硬編碼的變量到您的Shape實例要麼。那不是一個非常有用的方法。有兩種方法可以做到這一點。要麼讓形狀類具有受保護的變量(意味着它將被繼承)。然後你塑造類應該是這樣的:

public abstract class shape{ 

    protected int length; 
    protected int width; 

    shape(){ 

    } 

    shape(int length, int width){ 
     this.lenght = length; 
     this.width = width; 
    } 

    public int derp() { 
     int thing = (int) Math.random() * 9 ; 
     length = thing; 
     return length; 
    } 
} 

或者,如果你不想要讓這個大改變你的類,你纔可以直接傳遞參數到方法類似

r.derp(1, 100); 

但我不同意tieTYT,你應該花一些時間學習一些更多的Java語法。由於這是一個非常單純的打電話:)。

+0

好的。那麼如何使用Rectangle中正在運行的derp方法,使用Shape中已有的長度和事物值呢? – user3348422

+0

非常感謝! Rectangle類最終能夠識別該方法。而且我能夠在Rectangle中完成該方法,因此它實際上可以工作! – user3348422

0

您不會將方法導出到其他類中。從邏輯上講,你想要Rectangle擴展形狀(根據命名約定,也應該是Shape),但是你正在做另一種方式。

但是有很多東西在你的代碼中沒有意義,所以你可能想用清晰的英文來解釋你想要完成的事情。

+0

我需要做的唯一事情就是採用內部形狀的「derp」方法,並在保持Shape方法的同時在Rectangle中使用它。 – user3348422

0

有沒有辦法,這可以工作,因爲你試圖從超類訪問子類的方法。超類不知道它的孩子。您可以使用子類中超類的方法,也可以將子類中的方法放入超類中以在那裏使用。

0

好吧,你的類Shape繼承Rectangle ...我們將忽略這個不尋常的邏輯。

Rectangle.derp(int thing, int length, int width);// wrong 

首先,您不能通過在調用中聲明參數來調用方法derp。例如,您可以撥打這樣的電話:

int thing = 1, length = 2, width = 3; 
Rectangle.derp(thing, length, width);//with condition that derp method 
//declaration to be public static 

Rectangle r1 = Rectangle();//wrong 

這是類構造函數。你聲明它是公開的,除非你想讓你的班級變成單身人士......但是我懷疑。一個與你的「新」 keyord這樣的實例是:

Rectangle r1 = new Rectangle(); 

同爲一個1點2的參數。

這裏Rectangle類的完整代碼:

public class Rectangle { 
    public Rectangle(int width2, int length2) { 
     // TODO: Process width and length here 
    } 

    public Rectangle() { 
     // TODO: process default values here 
    } 

    public Rectangle(int value) { 
     // TODO: Process value here 
    } 

    public static void derp(int thing, int length, int width) { 

    } 

    public static void main(String args[]) { 

     int thing = 1, length = 2, width = 3; 
     Rectangle.derp(thing, length, width); 

     // r1 will take all default value 
     Rectangle r1 = new Rectangle(); 

     // r2 will take all supplied value 
     Rectangle r2 = new Rectangle(4, 5); 

     // r3 will take supplied length. width will take default value 
     Rectangle r3 = new Rectangle(10); 

     // r4 will take the same value of r2 
     Rectangle r4 = r2; 

     // the rest of the code 
    } 

}