[英]Creating and comparing objects based on user input
我對 C# 很陌生,我有一個任務要解決。
我需要創建一個控制台應用程序,要求用戶制作 2 個圖形(用戶輸入再次選擇矩形或六邊形)來輸入它們的屬性並比較哪個更大。 出於某種原因,即使在使用返回 null 的 else 語句之后,我也不是所有的代碼路徑都在 SelectAndCreateFigure 中返回一個值。
這是我的代碼:
圖類:
namespace PU_task
{
public class Figure
{
public virtual double Area()
{
return 0;
}
}
}
六邊形類:
using System;
namespace PU_task
{
public class Hexagon :Figure
{
private double side;
public double Side { get => side; set => side = value; }
public Hexagon()
{
}
public override double Area()
{
double area = 3 * Math.Sqrt(3 * Math.Pow(side, 2)) / 2;
return area;
}
public Figure CreateFigure(double side)
{
Hexagon hexagon = new Hexagon
{
Side = side
};
return hexagon;
}
}
}
矩形類:
namespace PU_task
{
public class Rectangle : Figure
{
private double length;
private double width;
public double Length { get => length; set => length = value; }
public double Width { get => width; set => width = value; }
public Rectangle()
{
}
public override double Area()
{
double area = length * width;
return area;
}
public Figure CreateFigure(double width,double length)
{
Rectangle rectangle = new Rectangle
{
Width = width,
Length = length
};
return rectangle;
}
}
}
我的主文件中的代碼:
using System;
namespace PU_task
{
internal class Program
{
static void Main(string[] args)
{
Figure figure1 = new Figure();
figure1.SelectAndCreateFigure();
Figure figure2 = new Figure();
figure2.SelectAndCreateFigure();
SmallerArea(figure1, figure2);
}
public Figure SelectAndCreateFigure(Figure figure)
{
Console.WriteLine("Select figure type:");
string input = Console.ReadLine().ToLower();
if (input == "rectangle")
{
Console.WriteLine("Enter length:");
double length = double.Parse(Console.ReadLine());
Console.WriteLine("Enter width:");
double width = double.Parse(Console.ReadLine());
Rectangle rectangle = new Rectangle();
rectangle.CreateFigure(width, length);
return rectangle;
}
else if (input == "hexagon")
{
Console.WriteLine("Enter the the side length:");
double side = double.Parse(Console.ReadLine());
Hexagon hexagon = new Hexagon();
hexagon.CreateFigure(side);
}
else return null;
}
public void SmallerArea(Figure figure1, Figure figure2)
{
if (figure1.Area() > figure2.Area())
{
Console.WriteLine(figure1.Area());
}
else
{
Console.WriteLine(figure2.Area());
}
}
}
}
嘗試這個
static void Main(string[] args)
{
double hexagonArea=0;
double rectangleArea=0;
CreateFigures(ref hexagonArea, ref rectangleArea);
Console.WriteLine("rectangle area - "+rectangleArea.ToString());
Console.WriteLine("hexagon area - "+hexagonArea.ToString());
if (rectangleArea > hexagonArea)
Console.WriteLinge ("rectangle area is bigger!");
else Console.WriteLinge ("hexagon area is bigger!");
}
public void CreateFigures(ref double hexagonArea, ref double rectangleArea)
{
for (int i = 0; i < 2; i++)
{
Console.WriteLine("Select figure type:");
string input = Console.ReadLine();
if (input == "rectangle")
{
Console.WriteLine("Enter length:");
double length = double.Parse(Console.ReadLine());
Console.WriteLine("Enter width:");
double width = double.Parse(Console.ReadLine());
rectangleArea= CreateRectangle(width, length);
}
else if (input == "hexagon")
{
Console.WriteLine("Enter width:");
double side = double.Parse(Console.ReadLine());
hexagonArea = CreateHexagon(side);
}
}
}
public void CreateRectangle(double length,double width)
{
Rectangle rectangle = new Rectangle
{
Width = width,
Length = length
};
return rectangle.Area();
}
public double CreateHexagon(double side)
{
Hexagon hexagon = new Hexagon
{
Side = side
};
return hexagon.Area();
}
您在使用正確數據初始化對象時遇到問題。 每個類都需要一個構造函數來填充數據。 C#
還支持屬性,這些屬性可以存儲值(如六邊形的邊),也可以返回計算值(如圖形的區域)。
上述功能的基本框架如下所示:
public abstract class Figure
{
public abstract double Area { get; }
}
public class Rectangle : Figure
{
public Rectangle(double length, double width)
{
Length = length;
Width = width;
}
public double Length { get; }
public double Width { get; }
public override double Area => Length * Width;
}
public class Hexagon : Figure
{
public Hexagon(double side)
{
Side = side;
}
public double Side { get; }
public override double Area => 3 * Math.Sqrt(3 * Math.Pow(Side, 2)) / 2;
}
class Program
{
static void Main(string[] args)
{
Figure rect = new Rectangle(12.0, 5.5);
Figure hex = new Hexagon(8.0);
if (rect.Area > hex.Area)
{
Console.WriteLine("Rectangle is bigger");
}
else
{
Console.WriteLine("Hexagon is bigger");
}
}
}
您可以根據上面的類層次結構設計所需的功能。
您在SelectAndCreateFigure
中收到“並非所有代碼路徑都返回值”錯誤的原因是因為在您的 else if 語句中您沒有返回數字。 這將解決該特定錯誤。
public Figure SelectAndCreateFigure(Figure figure)
{
Console.WriteLine("Select figure type:");
string input = Console.ReadLine().ToLower();
if (input == "rectangle")
{
Console.WriteLine("Enter length:");
double length = double.Parse(Console.ReadLine());
Console.WriteLine("Enter width:");
double width = double.Parse(Console.ReadLine());
Rectangle rectangle = new Rectangle();
rectangle.CreateFigure(width, length);
return rectangle;
}
else if (input == "hexagon")
{
Console.WriteLine("Enter the the side length:");
double side = double.Parse(Console.ReadLine());
Hexagon hexagon = new Hexagon();
hexagon.CreateFigure(side);
return hexagon;
}
else return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.