亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算各種形狀面積的重載靜態方法,重復方法警告

計算各種形狀面積的重載靜態方法,重復方法警告

陪伴而非守候 2022-09-07 15:26:32
我正在閱讀從Java開始,書中提出的一個挑戰是:“編寫一個類,其中包含三種重載的靜態方法來計算以下幾何形狀的面積:圓形,矩形和圓柱體。圓的面積只需要一個參數,這里沒有問題,所以我省略了該方法。但是矩形的面積和圓柱體的面積都需要兩個參數:public class Area{    public static double area(double w, double l)    {      //Area of rectangle        return l*w;    }    public static double area(double r, double h)    {      //Area of a cylinder        return Math.PI * (r*r) *h;    }}使用上面的代碼,我得到警告“我知道,如果我簡單地更改其中一個參數的類型,我就不會有這個問題,但這是唯一可以做到的方法嗎?我不能有兩個具有相同參數列表的重載靜態方法嗎?duplicate method area(double, double) in type Area."
查看完整描述

4 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

這兩種方法:

  • 被稱為“區域”

  • 取兩個類型為“double”的參數

所以他們是無法區分的。您為正式參數選擇的名稱不會影響決策,因為(從瑣碎的“因為這就是語言的工作方式”開始)這些名稱在調用 area() 時不會寫在源代碼中。

給定問題陳述,您別無選擇,只能將至少一個參數的類型更改為兩個重載之一。是否允許整數大???Float/Double讓我有點緊張:這太容易犯錯誤了。


我知道這是在Java中重載方法的練習,所以你必須遵循問題陳述。

然而,作為一個普遍的問題:給定一個名為Area的類和一堆靜態面積計算器,IMO命名每個這樣的面積計算方法來說明它到底做了什么確實更容易理解。例如和.根據參數的類型進行不同的計算似乎一目了然地無法理解好名稱的方式。areaOfCircleareaOfRectangle


查看完整回答
反對 回復 2022-09-07
?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

圓的面積可以更改為半徑作為雙精度,pi 作為浮點數。這樣,編譯器將識別圓圈方法的差異。本課的想法是,只要您更改方法中的參數,就可以擁有多個同名的方法,這就是重載方法的意義所在。


查看完整回答
反對 回復 2022-09-07
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

你可以做這樣的東西:


public class Area {


    // Rectangle

    public static double calculateArea(int width, int length) {

        return width * length;

    }


    // Cylinder

    public static double calculateArea(double radius, int height) {

        return Math.PI * Math.pow(radius, 2) * height;

    }


    // Circle

    public static double calculateArea(double radius) {

        return Math.PI * Math.pow(radius, 2);

    }

}

然后使用以下命令調用它:


Area.calculateArea(2.0); // Call 'Circle' method

Area.calculateArea(2.0, 3); // Call 'Cylinder' method

Area.calculateArea(3, 5); // Call 'Rectangle' method


查看完整回答
反對 回復 2022-09-07
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

這是一個人為的答案,它滿足了3個重載“區域”方法的要求,而不必在我們可能更喜歡雙精度的情況下使用浮點數或int。


首先是區域類。對于每個形狀,我們需要3件事:一個(內部)類,用于保存定義形狀的值;一個函數,它傳遞該類的對象;和(至關重要的)一個接受單個參數(內部類的對象)的 area() 方法。正是這最后一項滿足了“重載方法”的要求。


class Area {


    static class Circle {

        double radius;

        Circle(double r) { radius = r; }

    }


    static Circle circle(double r) { 

        return new Circle(r);

    }


    static double area(Circle c) {

        return PI * c.radius * c.radius;

    }


    static class Rectangle {

        double length, width;

        Rectangle(double l, double w) { length = l; width = w; }

    }


    static Rectangle rectangle(double l, double w) {

        return new Rectangle(l, w);

    }


    static double area(Rectangle r) {

        return r.length * r.width;

    }


    static class Cylinder {

        double radius, height;

        Cylinder(double r, double h) { radius = r; height = h }

    }


    static Cylinder cylinder(douvle r, double h) {

        return new Cylinder(r, h);

    }


    static double area(Cylinder c) {

        return 2 * PI * c.radius * c.height + // side

               PI * c.radius * c.radius * 2;  // ends

               // see note!

    }

]

現在,如何使用它們?這些示例顯示了如何:


a1 = Area.area(Area.circle(1));

a2 = Area.area(Area.rectangle(2,3));

a3 = Area.area(Area.cylinder(4,5));

像“圓圓(...)”這樣的函數{ ... }"存在,所以我不必寫“新”來創建一個圓圈,等等。


很丑吧?


注意:圓柱體“面積”的公式實際上是計算體積。3D實體的面積到底是什么意思?如果你指的是表面積,那么它是兩個末端圓圈加上環繞的矩形,形成“側面”。前者的每個區域都有區域“pi r^2”;矩形有邊'2 pi r'和'h',因此面積'2 pi r h'。


查看完整回答
反對 回復 2022-09-07
  • 4 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號