我正在做与分数相关的家庭作业。我想阻止用户为分母(“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();
}
}
}
答案 0 :(得分:8)
你不能使用你的二传手。在Bruch b1 = new Bruch(zähler1, nenner1);
,您可以在构造函数中设置字段,而不是属性。
更改构造函数以设置属性:
public Bruch(int zähler, int nenner)
{
Zähler = zähler;
Nenner = nenner;
}
你可以通过在设置者处设置一个断点来查看它们从未被调用过,然后通过代码追溯到 设置值的位置。
答案 1 :(得分:3)
你的问题在于你的构造函数:
public Bruch(int zähler, int nenner)
{
this.zähler = zähler;
this.nenner = nenner;
}
您的构造函数通过直接设置字段绕过setter。将其更改为:
public Bruch(int zähler, int nenner)
{
this.Zähler = zähler;
this.Nenner = nenner;
}
如果你这样做,你就会被击中:
b1.Zähler = 0;
Console.Writeline(b1.Zähler.ToString()); // should print 1
但是你的构造函数支持这一步。当您的财产和支持字段仅因大小写而异时,这是您遇到的问题之一。它们很容易混淆。虽然我个人并不喜欢这种风格,但是对于支持字段前缀为_
这个问题,这是一个很好的论据。
答案 2 :(得分:2)
您不在构造函数中使用setter!
public Bruch(int zähler, int nenner)
{
this.Zähler = zähler; // << Use the setter here!
this.Nenner = nenner;
}
关于另一个主题:对于变量名称不使用“Umlaute”是一种更好的方式。始终使用英文名称。
答案 3 :(得分:2)
这是因为您设置了错误的参数。替换Bruch
上的构造函数。
public Bruch(int zähler, int nenner)
{
this.Zähler = zähler;
this.Nenner = nenner;
}