ポリモフィズム(Virtua &オーバーライドメソッド)を使用してさまざまな図形の領域を計算するコードを作成しましたが、正しい結果が得られません。 :(以下Poymorphismと仮想メソッドを使用してCalculateArea - 適切な結果を取得しません。
は私のコードです:長方形&トライアングルについては
class Program
{
static void Main(string[] args)
{
double side = 0;
double length = 0;
double width = 0;
double height = 0;
double baseoftriangle = 0;
double radius = 0;
UserChoice:
Console.WriteLine("For what shape you want to calculate the Area:\n1. Sqaure\n2. Rectangle\n3. Triangle\n4. Circle");
Console.Write("Please Select the number from above options: ");
int choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
Console.Write("Please enter the side of square: ");
side = double.Parse(Console.ReadLine());
break;
case 2:
Console.Write("Please enter the length of rectangle: ");
length = double.Parse(Console.ReadLine());
Console.Write("Please enter the width of rectangle: ");
width = double.Parse(Console.ReadLine());
break;
case 3:
Console.Write("Please enter the height of triangle: ");
height = double.Parse(Console.ReadLine());
Console.Write("Please enter the base of triangle: ");
baseoftriangle = double.Parse(Console.ReadLine());
break;
case 4:
Console.Write("Please enter the radius of circle: ");
radius = double.Parse(Console.ReadLine());
break;
default:
Console.WriteLine("Incorrect Choice, please try again!");
goto UserChoice;
}
CalculateArea Sqa = new Square();
Sqa = new Rectangle();
Sqa = new Triangle();
Sqa = new Circle();
if (choice == 1)
{
Sqa.Area(side);
Sqa.ShowResult();
}
else if(choice==2)
{
Sqa.Area(length,width);
Sqa.ShowResult();
}
else if(choice==3)
{
Sqa.Area(height, baseoftriangle);
Sqa.ShowResult();
}
else
{
Sqa.Area(radius);
Sqa.ShowResult();
}
ChoiceOfAnotherCalculation:
Console.Write("\nDo you want to calculate area of any other shape? Give input in Yes or NO: ");
string choice1 = Console.ReadLine();
switch (choice1.ToUpper())
{
case "YES":
goto UserChoice;
case "NO":
break;
default:
Console.WriteLine("Incorrect Choice, please try again!");
goto ChoiceOfAnotherCalculation;
}
}
}
class CalculateArea
{
public double result;
public virtual void Area(double side)
{
}
public virtual void Area(double length, double width)
{
}
public void ShowResult()
{
Console.WriteLine($"Your Result is {result}");
}
}
class Square: CalculateArea
{
public override void Area(double side)
{
result = side * side;
}
}
class Rectangle:CalculateArea
{
public override void Area(double length, double width)
{
result = length * width;
}
}
class Triangle:CalculateArea
{
public override void Area(double height, double baseoftriangle)
{
result = (height * baseoftriangle)/2;
}
}
class Circle:CalculateArea
{
public override void Area(double radius)
{
result = 3.14159 * radius * radius;
}
}
、私は常に、結果として0を取得していますし、正方形のために、私はサークルから結果を取得しています、私はこの問題が原因で発生していると思います。私は(理由は多型で理解不足であってもよい)クラスのオブジェクトを作成している。
誰かが見ていると私は、実際の問題がここにあるものを知って聞かせていただけます。
これとは別にまた、私はような方法感謝するあなたが私に解決策を提供できるかどうかの努力は、各クラスのプロパティを&に設定してください。私はコードを書くことを試みました(それぞれのクラスでも基本クラスでもプロパティを定義しようとしていましたが)、私は上記の解決策に飛びついています。
私はまたシステムに私が長い間質問をすることを許可しないので質問をdownvote要求しないでください。これが私が物事を正しく理解できる唯一のプラットフォームなので。
多くのありがとうございます。
switch文の上にある 'CalculateArea Sqa'宣言を動かしてください。 switchステートメントで、Sqaを適切なシェイプに割り当てます。 'if'ステートメントは、' Sqa'という形をしてその面積を計算するように要求するときに消えます。多態性とは、クラスに何かを依頼するときにswitch文(または同等のif..else if..else)を必要とせず、具体的なクラスに応じて異なる動作をします。基本クラスは 'CalculateArea'ではなく' Shape'と呼ばれるべきです - 一般的にメソッドのクラス、動詞には名詞を使います。それは抽象的でなければならない。 –