Pari7 Ответов: 1

Как исправить исключение переполнения стека?


Привет!У меня есть проблема с исключением переполнения стека, но я не понимаю, в чем дело!
Вот конструктор и свойства, которые, по-видимому, имеют проблему.
любая помощь будет оценена по достоинству!

Что я уже пробовал:

    class Rational
    {

        public Rational(int numerator, int denominator)    //constructor
        {
            Rational r = new Rational((int)numerator, (int)denominator);
        }
        public int Numerator { get; set; } //property1
        public int Denominator  //property2
        {
            get
            {
                return denominator;
            }
            set
            {
                if (denominator != 0)
                    denominator = value;
                else
                    denominator = 1;
            }
        }
        private int denominator;  //field
}

PIEBALDconsult

Ваш конструктор вызывает сам себя.
Кроме того, я не думаю, что ваш сеттер для знаменателя-это именно то, что вам нужно.

1 Ответов

Рейтинг:
0

phil.o

Комментарий, который вы получили, имеет смысл.
Вы должны попытаться исправить свой конструктор таким образом:

public Rational(int numerator, int denominator)
{
   Numerator = numerator;
   Denominator = denominator;
}

Но на самом деле вам следует переосмыслить то, как вы справляетесь с попыткой установить знаменатель равным нулю. Вот бросаю а DivideByZeroException было бы лучше, так как это даст информацию о недопустимой попытке операции, а не просто проглотит проблему, присвоив знаменателю значение единицы, и таким образом вернет неверный результат, который будет использоваться вызывающим кодом.
Вы также должны потратить время на изучение основ классов C# и ООП в целом, а также понять понятия классов и экземпляров, например.
Как только вы получите эти базовые знания, вы сможете погрузиться в более сложную обработку рациональных чисел и реализовать такие концепции, как LCM и GCD, например, которые пригодятся для такого типа значений.
В заключение отметим, что рациональное число-это число, и таким образом оно передает все понятия типа ценности (неизменяемость и т. д.). struct вместо класса. Это потребовало бы избавления от ваших установщиков свойств, позволяя манипулировать рациональным числом только с помощью его конструктора или с помощью базовых математических функций между рациональными числами. Но, опять же, это может быть немного слишком рано для вас, чтобы рассмотреть.
Надеюсь, это поможет. Любезно.


BillWoodruff

+5