Search code examples
c#exceptiondefined

user defined illegal exception


I have this program where I'm supposed to return illegal triangle exception if sum of any 2 sides are greater than one. Where am i supposed to put the

if(side1 + side2 < side3)
    throw new illegalTriangleException("Sum of any 2 sides not bigger than the other side");
if(side1 + side3 < side2)
    throw new illegalTriangleException("Sum of any 2 sides not bigger than the other side");
if(side3 + side2 < side1)
    throw new illegalTriangleException("Sum of any 2 sides not bigger than the other side");

in here? I'm not sure where to put it. Also i would like to know if my way of writing the code is correct?

class Triangle
{
    public double side1, side2, side3;
    public Triangle() { }
    public Triangle(double s1, double s2, double s3)
    {
        side1 = s1;
        side2 = s2;
        side3 = s3;
    }
    public double Side1
    {
        get { return side1; }
        set {
            if (value<0)
            side1 = value;
        }
    }
    public double Side2
    {
        get { return side2; }
        set {
            if (value < 0)
            side2 = value;
        }
    }
    public double Side3
    {
        get { return side3; }
        set
        {
            if (value < 0)
            side3 = value;
        }
    }
}

class IllegalTriangleException : Exception
{
    public IllegalTriangleException() : base ("Sum of any 2 sides is not greater than the other") { }
    public IllegalTriangleException(string msg) : base("Sum of any 2 sides is not greater than the other" + msg) { }
    public IllegalTriangleException(string msg, Exception innerException) : base("Sum of any 2 sides is not greater than the other" + msg, innerException){ }
}

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Length of side: ");
            double side1 = Convert.ToDouble(Console.ReadLine());
            double side2 = Convert.ToDouble(Console.ReadLine());
            double side3 = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Your triangle is puuuuurfect");
        }
        catch (IllegalTriangleException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

Solution

  • First of all.

    • Properties are public and internal fields should be private. Read this guide https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx?f=255&MSPPError=-2147217396)
    • You should first make an instance of your Triangle with the Triangle(double s1, double s2, double s3) constructor. In that constructor you can call the private CheckForIllegalTriangle() to check the side lengths. This will then throw your exception if there is a fault.
    • Make the default constructor private. So you dont have to worrie about calling the CheckForIllegalTriangle().
    class Triangle
    {
        private double side1, side2, side3;
    
        private Triangle() { }
    
        public Triangle(double s1, double s2, double s3)
        {
            side1 = s1;
            side2 = s2;
            side3 = s3;
    
            CheckForIllegalTriangle();
        }
    
        public double Side1
        {
            get { return side1; }
            set
            {
                if (value < 0)
                    side1 = value;
            }
        }
    
        public double Side2
        {
            get { return side2; }
            set
            {
                if (value < 0)
                    side2 = value;
            }
        }
    
        public double Side3
        {
            get { return side3; }
            set
            {
                if (value < 0)
                    side3 = value;
            }
        }
    
        public void CheckForIllegalTriangle()
        {
            if ((side1 + side2 < side3) ||
               (side1 + side3 < side2) ||
               (side3 + side2 < side1))
                throw new IllegalTriangleException("Sum of any 2 sides not bigger than the other side");
        }
    }
    
    
    class IllegalTriangleException : Exception
    {
        public IllegalTriangleException() : base("Sum of any 2 sides is not greater than the other") { }
        public IllegalTriangleException(string msg) : base("Sum of any 2 sides is not greater than the other" + msg) { }
        public IllegalTriangleException(string msg, Exception innerException) : base("Sum of any 2 sides is not greater than the other" + msg, innerException) { }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Length of side 1: ");
                double side1 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Length of side 2: ");
                double side2 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Length of side 3: ");
                double side3 = Convert.ToDouble(Console.ReadLine());
                Triangle t1 = new Triangle(side1, side2, side3);
    
                Console.WriteLine("Your triangle is puuuuurfect");
            }
            catch (IllegalTriangleException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }