2016-04-13 7 views
-1

私は、1,2,3を選択して四角形、三角形、または四角形を選択するプログラムを作成しようとしています。終了するには0を入力します。次に、ユーザーが形状の幅と高さを指定し、形状名、幅、高さを出力し、面積を計算します。私のパブリックRectangle(int幅、int高さ)と私のパブリックSquare(int高さ)とパブリックTriangle(int幅、int高さ)クラスのすべての同じエラーを与える... "引数はありません私はちょうど私のロジックを取得しようとしている抽象クラスを使用すると、ユーザー入力で異なるクラスを作成する

?まさにその平均値とどのようにそれを修正するには何をするかGeometricFigure.GeometricFigureの必要な仮パラメータ「幅」(int型、int型)に対応して右の任意のヘルプは歓迎です!

をシステムを使用して

;

class Program 
{ 
    static void Main(string[] args) 
    { 
    Rectangle r; 
    Square s; 
    Triangle t; 
    int number; 
    string value = null; 

    do 
    { 
     Console.WriteLine("Choose a shape from the following options "); 
     Console.WriteLine("[1] Rectangle"); 
     Console.WriteLine("[2] Square"); 
     Console.WriteLine("[3] Triangle"); 
     Console.WriteLine("Enter the option number (or zero to terminate this program): "); 
     number = Int32.Parse(value); 
     Console.Write(number); 
    } 
    while (number != 0); 

     if (number == 0) 
     { 
      Console.WriteLine(); 
      Console.WriteLine("Please press <enter> to terminate this program"); 
      Console.ReadLine(); 
     } 
     else if (number == 1) 
     { 
     Console.Write("Please press enter the width and then hit enter: "); 
     int width = Int32.Parse(Console.ReadLine()); 
     Console.Write("Please press enter the height and then hit enter: "); 
     int height = Int32.Parse(Console.ReadLine()); 


     r = new Rectangle(width, height); 
    } 
     else if (number == 2) 
     { 

     Console.Write("Please press enter the height and then hit enter: "); 
     int height = Int32.Parse(Console.ReadLine()); 


     s = new Square(height); 
    } 
     else if (number == 3) 
     { 
     Console.Write("Please press enter the width and then hit enter: "); 
     int width = Int32.Parse(Console.ReadLine()); 
     Console.Write("Please press enter the height and then hit enter: "); 
     int height = Int32.Parse(Console.ReadLine()); 


     t = new Triangle(width, height); 
    } 

} 
} 
    public abstract class GeometricFigure 
{ 
     private readonly int width; 
     private readonly int height; 
     private readonly double area; 


     public GeometricFigure(int width, int height) 
     { 

     } 

     public abstract double computeArea 
     { 
      get; 
     } 



     public int Width 
     { 
      get { return width; } 

     } 

     public int Height 
     { 
      get { return height; } 

     } 

    } 


    public class Rectangle : GeometricFigure 
    { 
     private int width; 
     private int height; 

     public Rectangle(int width, int height) 
     { 

     } 

     public override double computeArea 
     { 
     get { return width * height; } 
     } 

    } 




     public class Square : Rectangle 
{ 
     private int side; 


     public Square(int height) 
     { 

      side = height; 
     } 

     public override double computeArea 
     { 
     get 
     { 
     // Given the side, return the area of a square: 
     return side * side; 
    } 

} 
} 

    public class Triangle : GeometricFigure 
    { 

     public Triangle(int width, int height) 
     { 

     } 
     public override double computeArea 
     { 


      get { return (Width * Height)/2; } 


     } 
    } 
+0

することができます*宣言*オブジェクト* *それをインスタンス化せずに。論理的には、高さと幅を持たない矩形を作成することはできません。構文的には、コンストラクタのパラメータが必要です。方法を知るまでオブジェクトをインスタンス化しないでください。しかし、このコードは良い答えのためにあまりにも混乱です。 – Jonesopolis

+0

ええ、私は今、この問題に4日間服従してきた複数のクラスで何かをすることになります。 – mvanderk10

答えて

1

まず、四角形や三角形をコメントアウトして、四角形(または好きな形)に焦点を合わせることをお勧めします。

あなたGeometricShapeは、「エリア」https://msdn.microsoft.com/en-us/library/yd3z1377.aspx

あなたRectangleコンストラクタは、型宣言で基本コンストラクタを呼び出すべきではないとパラメータ名が一致している必要があります見るという抽象プロパティを必要とします。お見せするために私が何を意味するか:あなたはまたせずに四角形を宣言する必要があり

int number = 1; // The shape you want 
int width = 10; 
int height = 20; 
double area = width * height; 

r = new Rectangle(number, width, height, area) 

base(int number, int _width, int _height, double area) 

base(number, width, height, area) 

あなたはこのようなあなたのコンストラクタにいくつかの値を渡す必要がありますする必要があります@jonesopolisが示唆するようにインスタンス化する。

Rectangle r; 

希望します。

編集:ここでは

は、コンソールから、いくつかの数字を読み取り、長方形のコンストラクタに渡すための例です:

else if (number == 1) 
{ 
    Console.Write("Please press enter the width and then hit enter: "); 
    int width = Int32.Parse(Console.ReadLine()); 
    Console.Write("Please press enter the height and then hit enter: "); 
    int height = Int32.Parse(Console.ReadLine()); 
    double area = width * height; 

    r = new Rectangle(number, width, height, area); 
} 
+0

どの値が渡されるのか分かりませんが、1,2,3または0を選択して終了すると、その値が返されます。 – mvanderk10

+0

その場合は、コンソールから読み込んだものを保存するための変数が必要です。 do whileループでnumber変数を読み取っている場所の例があります。あなたはConslole.ReadLine()を使ってそれを行うことができます。ここの例を参照してください.https://msdn.microsoft.com/en-us/library/system.console.readline(v = vs.110).aspx –

+0

私はそれを... "数字ではなく、すでにintまたはdoubleを設定しているのと同じです...そうですか? – mvanderk10

1

ファーストオフ、どこでユーザー入力を取得していますか?あなたは値を宣言しますが、何も割り当てずにnullにします。

あなたの質問に答えるには、4つの引数(数値、高さの幅と面積)を持つRectangleコンストラクタを宣言していますが、コンストラクタを呼び出すときには何も与えません。私はなぜ数と面積がコンストラクタの議論になる必要があるのか​​わかりませんが、その高さ、幅、面積以外のことは気にしないので、数を与えることは意味をなさないし、それはそれを計算して、それを伝えてはならない。

問題を解決するには、コンストラクタの引数をちょうどint width, int heightに変更し、コンストラクタに幅と高さを渡します(Rectangle(someValue,someOtherValue);)。

正方形と三角形にもこの修正を適用する必要があります。

第3に、構文エラーが小さいため、引数を基本コンストラクタに渡すときに型を再記述する必要はありません。あなたが渡したい変数名や値を記述するだけです。

申し訳ありませんが、それは情報ダンプのビットだったが、私はそれが役立つことを願っています。

+0

2人は平方に行くことを知っているはずなので、番号を付けましたか?私は避けて、幅と高さの入力を入れません。私はそれを個々のクラスに入れるのがよいと思いますか? – mvanderk10

+0

コードは、2から正方形に行くことを知っています: 'else if(number == 2){Square(); } '。あなたの2番目の懸念事項として、C#はまだコンストラクタでいくつかの引数を参照する必要があります。私はちょうど 'Square(2,2);を提案し、それらを実装すると2を実際の値に置き換えます。 – sowrd299

+0

2人は何を表していますか?プレースホルダだけ? – mvanderk10

関連する問題