2014-04-04 55 views
0

我有工作代碼,set和get應該不允許負面輸入。但是,運行此操作時,負值輸入仍會返回結果,但我錯過了導致負值仍然被計算出來的因素?另外,我將如何引入一個允許用戶計算多於一個圓的函數?Circle設置並獲得

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace console 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 

      Console.Write("What is the circle’s radius: "); 
      double radius = Convert.ToDouble(Console.ReadLine()); 
      Circle ans = new Circle(radius); 


      Console.WriteLine("The area of the circle is " + ans.getArea); 
      Console.WriteLine("The Diameter of the circle is " + ans.getDiameter); 
      Console.WriteLine("The Circumference of the circle is " + ans.getCircumference); 

      Console.Write("Enter any character to quit program. "); 
      double stop = Console.Read(); 

     } 
    } 
} 

這就是方法和類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace console 
{ 
    class Circle 
    { 

     public double radius; 
     public const double PI = 3.14159; 

     public Circle(double r) 
     { 
      radius = r; 
     } 

     public Circle() 
     { 
      radius = 0.0; 
     } 

     public double getDiameter 
     { 
      get 
      { 
       return radius * 2; 
      } 

     } 


     public double getArea 
     { 
      get 
      { 
       return PI * radius * radius; 
      } 

     } 
     public double getCircumference 
     { 
      get 
      { 
       return 2 * PI * radius; 
      } 

     } 
     // property Radius 
     public double Radius 
     { 
      get 
      { 
       return radius; 
      } 

      set 
      { 
       // ensure non-negative radius value 
       if (value >= 0) 
        radius = value; 
      } 
     } 
    } 
} 

回答

1

在你的構造你改變你的public字段的值不是property所以你setter方法是從來沒有executed.I認爲你應該讓你的領域private,然後改變你的構造是這樣的:

private double radius; 
public Circle(double r) 
{ 
    Radius = r; 
} 

而且你可能想顯示一條消息或Thr當用戶嘗試將負值分配給radius時,在您的setter方法中有一個例外。

另外,我將如何引入一個函數,允許用戶計算多個圓?

您可以使用loop。將代碼放入循環中並聲明計數器。

for(int i = 0; i <= 5; i++) 
{ 
    /* put your code here, get the input perform the calculation 
    and display the message */ 
} 

另一種方式可能是全光照一個while循環:

while(true) 
{ 
    /* put your code here */ 

    Console.WriteLine("Would you like to continue ? (y/n)"); 
    var userChoice = Console.ReadKey().KeyChar; 
    if(char.ToLower(userChoice) != 'y') break; 
} 
+0

問題解決了,謝謝你。現在我該如何去詢問用戶是否想要做另一個圈子,或者如果輸入了一個字母,它會返回到程序的開頭?我知道這將通過主要方法完成,但從那裏我迷路了。 – user3429402

+0

我試過你的循環建議,反正有沒有一組試驗,用戶定義他們什麼時候停止或許通過y/n? y表示繼續並停止程序? – user3429402

+0

@ user3429402所以你有你的想法,你爲什麼不嘗試呢? –