2016-08-20 158 views
1

我有兩個類。一個包含數據和行爲。另一個只是輸入和顯示數據。當我調用另一個類的方法來顯示結果時,它返回零。從一個類調用方法到另一個類?

任何幫助...感謝

數據和行爲:

class CalculateArea 
{ 
    private const double PI = 3.14; 
    private double cirArea; 
    private double recArea; 
    private double cilArea; 
    private double radius; 
    private double length, width; 
    private int height; 

    // Constructors 
    public CalculateArea(double radius1) 
    { 
     radius = radius1; 
    } 
    public double CalculateCircleArea() 
    { 
     cirArea = (PI * (radius * radius)); 
     return cirArea; 
    } 

    public CalculateArea(int height1) 
    { 
     height = height1; 
    } 

    public CalculateArea(double lenght1 , double width1) 
    { 
     length = lenght1; 
     width = width1; 

    } 

    //public CalculateArea() 
    //{ 
     // TODO: Complete member initialization 
    //} 

    // methods 


    // 
    public double CalculateRectangleArea() 
    { 
     recArea = (length * width); 
     return recArea; 
    } 
    // 
    public double CalculateCylinderArea() 
    { 
     cilArea = (PI * (radius * radius) * height); 
     return cilArea; 
    } 
} 

輸入和顯示:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string number; 
     Console.WriteLine("Which figure do you want to see calculated select a number"); 
     Console.WriteLine("Circle : 1"); 
     Console.WriteLine("Rectangle : 2"); 
     Console.WriteLine("Cylinder : 3"); 

     number= Console.ReadLine(); 
     int numb=Convert.ToInt32(number); 

     if (numb == 1) 
     { 
      Console.WriteLine("Enter the radius for circle"); 
      string rad; 
      rad = Console.ReadLine(); 
      int radiusX = Convert.ToInt32(rad); 
      CalculateArea newCal1 = new CalculateArea(radiusX); 
      Console.WriteLine("The result of calculation is {0}", newCal1.CalculateCircleArea()); 
     } 

     else if(numb == 2) 
     { 
      Console.WriteLine("Enter the length "); 
      number = Console.ReadLine(); 
      double lenght; 
      lenght = Convert.ToDouble(number); 
      Console.WriteLine("Enter the width "); 
      number = Console.ReadLine(); 
      double width; 
      width = Convert.ToDouble(number); 
      CalculateArea newCal2=new CalculateArea(lenght , width); 
      Console.WriteLine("The result of calculation is {0}" , newCal2.CalculateRectangleArea()); 
     } 

     else if (numb == 3) 
     { 
      Console.WriteLine("Enter the height "); 
      number = Console.ReadLine(); 
      int height; 
      height = Convert.ToInt32(number); 
      Console.WriteLine("Enter the radius"); 
      number = Console.ReadLine(); 
      int radius; 
      radius = Convert.ToInt32(number); 
      CalculateArea newCal3 = new CalculateArea(height, radius); 
      Console.WriteLine("The reslut of calculation is {0}", newCal3.CalculateCylinderArea()); 
     } 

     else 
     { 
      Console.WriteLine("There is no any calculation number check the information and try again"); 
     } 

     Console.ReadLine(); 

    } 
+0

你有什麼困難? – eurotrash

+0

我想返回計算結果,但每次返回0 – jawed

+0

計算結果 – jawed

回答

2

下面的代碼:

CalculateArea newCal1 = new CalculateArea(radiusX); 

是調用以下構造函數:

public CalculateArea(int height1) 
{ 
    height = height1; 
} 

因爲半徑X是一個整數...

因此,值存儲在高度,而不是在半徑。 因此,當您調用該方法來計算圓的面積時,它會使用半徑計算,該值仍然爲0.0。

CalculateCylinderArea也使用半徑和高度,但是您的構造函數僅使用兩個參數,高度和寬度。 因此,在方法3中,它也「失敗」,因爲半徑和寬度爲0.0

矩形的計算工作。

要解決圓的問題,您需要將raiusX變量更改爲double。

例如,要解決圓柱問題,可以將例程更改爲使用長度和寬度,而不是半徑和高度。

但作爲一個側面說明,還是有更好的方法做你正在嘗試做的:)

+0

不僅此方法所有方法使這個問題 – jawed

+0

請參閱我的更新回答。只有方法1和3失敗。方法2正在運行。 – Jauch

+0

謝謝你是這個問題,我沒有借。 – jawed

0

除了@ JAUCH的答案,我想給一些額外的信息是什麼。

如果類型(類或結構體)中的幾個方法具有相同的名稱,則稱它們被重載。只有當它們具有不同的形式參數列表時才允許這樣做。參數的名稱無關緊要;只有他們的人數和他們的類型。此外,返回類型並不重要。

你的問題與Overload resolution有關。這是C#爲了弄清楚哪個重載版本必須被調用。理解這一點很重要,這是在編譯時發生的,而不是在運行時發生。這意味着通過的具體值並不重要,因爲它們在編譯時並不知道。只有實際論證的類型很重要。

請按照上面的規格鏈接,但Jon Skeet的文章可能更容易理解:C# in Depth: Overloading

相關問題