我正在从事与分数有关的作业。我想防止用户为分母(“ nenner”)和分子(“zähler)输入小于1的数字。我尝试使用set实现此方法,但它不起作用。如果分子/分母小于1我希望将它们设置为1。关于我的代码中的错误的任何提示将不胜感激。

namespace Aufgabenblatt2
{
class Bruch
{
    private int zähler;
    public int Zähler
    {
        get { return zähler; }
        set
        {
            if (value < 1)
            {
                //Console.WriteLine("Keine negativen Brüche und Division durch 0 erlaubt! Wert wurde auf 1 gesetzt");
                zähler = 1;
            }
            else
                zähler = value;
        }
    }

    private int nenner;
    public int Nenner
    {
        get { return nenner; }
        set
        {
            if (value < 1)
            {
                //Console.WriteLine("Keine negativen Brüche und Division durch 0 erlaubt! Wert wurde auf 1 gesetzt");
                nenner = 1;
            }
            else
                nenner = value;
        }
    }


    public Bruch(int zähler, int nenner)
    {
        this.zähler = zähler;
        this.nenner = nenner;
    }

    /// <summary>
    /// addiert zum Bruch einen weiteren hinzu
    /// </summary>
    /// <param name="summand">Summand</param>
    /// <returns>Summe</returns>
    public Bruch Addiere(Bruch summand)
    {
        Bruch ergebnis = new Bruch(this.zähler * summand.nenner + summand.zähler * this.nenner, this.nenner * summand.nenner);
        return ergebnis;
    }

    public override string ToString()
    {
        return String.Format("{0}/{1}", this.zähler, this.nenner);
    }
}
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Eingabe erster Zähler:");
        int zähler1 = Convert.ToInt32(Console.ReadLine());       //Read numerator value from console and save to int zähler
        Console.Write("Eingabe erster Nenner:");
        int nenner1 = Convert.ToInt32(Console.ReadLine());       //Read denominator value from console and save to int nenner

        Bruch b1 = new Bruch(zähler1, nenner1);


        Console.Write("Eingabe zweiter Zähler:");
        int zähler2 = Convert.ToInt32(Console.ReadLine());       //Read second numerator
        Console.Write("Eingabe zweiter Nenner:");
        int nenner2 = Convert.ToInt32(Console.ReadLine());       //Read second denominator

        Bruch b2 = new Bruch(zähler2, nenner2);

        Console.WriteLine("{0} + {1} = {2}", b1, b2, b1.Addiere(b2));   //Print both fractions, compute and print sum on Console

        Console.ReadLine();
    }
}


}

最佳答案

您不使用二传手。在Bruch b1 = new Bruch(zähler1, nenner1);处,您可以在构造函数中设置字段,而不是属性。

更改构造函数以设置属性:

public Bruch(int zähler, int nenner)
{
    Zähler = zähler;
    Nenner = nenner;
}


您可以通过在设置器上放置一个断点并看到它们从未被调用,然后在代码中追溯到设置值的位置来捕捉到这一点。

10-08 06:51