簡體   English   中英

根據用戶輸入創建和比較對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM