Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#控制台程序中使用Reduce()方法并转换不正确的分数_C# - Fatal编程技术网

如何在C#控制台程序中使用Reduce()方法并转换不正确的分数

如何在C#控制台程序中使用Reduce()方法并转换不正确的分数,c#,C#,我对C#编程还是个新手,我一直在做下面的项目。我知道这一定很容易,但我脑子里一直在想如何放置Reduce()方法,以及如何通过消除整数并调用Reduce()方法来转换分数。以下是项目: 添加一个运算符+()方法,该方法添加两个分数。若要添加两个分数,请首先删除该值的任何整数部分。例如,2 1/4变为9/4,1 3/5变为8/5。找到一个公分母并将分数转换成它。例如,添加9/4和8/5时,可以将它们转换为45/20和32/20。然后,你可以加上分子,得到77/20。最后,调用Reduce()方法减

我对
C#
编程还是个新手,我一直在做下面的项目。我知道这一定很容易,但我脑子里一直在想如何放置
Reduce()
方法,以及如何通过消除整数并调用
Reduce()
方法来转换分数。以下是项目:

添加一个运算符
+()
方法,该方法添加两个分数。若要添加两个分数,请首先删除该值的任何整数部分。例如,2 1/4变为9/4,1 3/5变为8/5。找到一个公分母并将分数转换成它。例如,添加9/4和8/5时,可以将它们转换为45/20和32/20。然后,你可以加上分子,得到77/20。最后,调用
Reduce()
方法减少结果,恢复任何整数值,使数字的小数部分小于1。例如,77/20变为3 17/20

这是我目前掌握的代码。我还将遇到一个问题,将这些分数相乘,然后创建一个数组,但现在我尝试一次只做一步。如有任何回复,将不胜感激

public class Fraction
{
    public int WholeNumber { get; private set; }
    public int Numerator { get; private set; }
    public int Denominator { get; private set; } 

    private void Reduce()
    {
        if (Numerator < Denominator)
        {
            WholeNumber = 0;
            return;
        }
        if (Numerator == Denominator)
        {
            WholeNumber = 1;
            Numerator = 0;
            return;
        }
        if (Numerator > Denominator)
        {
            WholeNumber = (int)Math.Floor((decimal)Numerator / Denominator);
            Numerator = Numerator - WholeNumber * Denominator;
        }
    } 

    //constructor with three parameters 
    public Fraction(int wholenumber, int numerator, int denominator)
    {
        WholeNumber = wholenumber;
        Numerator = WholeNumber * Denominator + Numerator;
        Reduce();
    }

    //constructor with two parameters 
    public Fraction(int numerator, int denominator)
    {
        WholeNumber = 0;
        Numerator = numerator;
        Denominator = denominator;
        Reduce();
    } 

    //parameter less with set values
    public Fraction()
    {
        WholeNumber = 0;
        Numerator = 0;
        Denominator = 1;
    }

    public static Fraction operator +(Fraction firstfraction, Fraction secondfraction)
    {
        if (firstfraction.Denominator == secondfraction.Denominator)
        {
            int firstProduct = (firstfraction.WholeNumber * firstfraction.Denominator) + firstfraction.Numerator;
            int secondProduct = (secondfraction.WholeNumber * secondfraction.Denominator) + secondfraction.Numerator;
            return (new Fraction(firstProduct + secondProduct, firstfraction.Denominator));
        }
        else
        {
            int commondenominator = firstfraction.Denominator * secondfraction.Denominator;
            int firstProduct = ((firstfraction.WholeNumber * firstfraction.Denominator) + firstfraction.Numerator) * secondfraction.Denominator;
            int secondProduct = ((secondfraction.WholeNumber * secondfraction.Denominator) + secondfraction.Numerator) * firstfraction.Denominator;
            return (new Fraction(firstProduct + secondProduct, commondenominator));
        }
    } 


    public Fraction Reduce(int WholeNumber, int Numerator, int Denominator)
    {
        int reduceWhole = (int)WholeNumber;
        while (Numerator > Denominator)
        {
            Numerator -= Denominator;
            reduceWhole += 1;
        }
        while (Denominator % Numerator == 0)
        {
            int factor = (int)Denominator / Numerator;
            Numerator = 1;
            Denominator = factor;
        }

        return new Fraction(reduceWhole, Numerator, Denominator);
    } 

}//end class

class Program
{
    static void Main(string[] args)
    {
        Fraction firstfraction = new Fraction();
        Fraction secondfraction = new Fraction();
        Fraction total = firstfraction + secondfraction;
        Console.WriteLine(total);
        Console.Write("Enter whole number portion of fraction: ");
        firstfraction.WholeNumber = Convert.ToInt32(Console.ReadLine());
        Console.Write("Enter numerator: ");
        firstfraction.Numerator = Convert.ToInt32(Console.ReadLine());
        Console.Write("Enter denominator: ");
        firstfraction.Denominator = Convert.ToInt32(Console.ReadLine());
        Console.Write("Enter whole number portion of fraction: ");
        secondfraction.WholeNumber = Convert.ToInt32(Console.ReadLine());
        Console.Write("Enter numerator: ");
        secondfraction.Numerator = Convert.ToInt32(Console.ReadLine());
        Console.Write("Enter denominator: ");
        secondfraction.Denominator = Convert.ToInt32(Console.ReadLine());
        Console.Write("{0} {1}/{2}", firstfraction.WholeNumber, firstfraction.Numerator,
        firstfraction.Denominator);
        Console.WriteLine(" + {0} {1}/{2}", secondfraction.WholeNumber,
        secondfraction.Numerator, secondfraction.Denominator);
        Fraction add = new Fraction();
        add = firstfraction + secondfraction;
        Console.Write("Result of adding two fractions is:{0} {1}/{2}", add.WholeNumber,
        add.Numerator, add.Denominator);
        Console.ReadLine();
    }//end main
}//end class
公共类分数
{
public int WholeNumber{get;private set;}
公共整型分子{get;private set;}
公共int分母{get;private set;}
私人股本减少()
{
if(分子<分母)
{
整数=0;
返回;
}
if(分子==分母)
{
WholeNumber=1;
分子=0;
返回;
}
if(分子>分母)
{
整数=(整数)数学下限((十进制)分子/分母);
分子=分子-整数*分母;
}
} 
//具有三个参数的构造函数
公共分数(整数、分子、分母)
{
整号=整号;
分子=整数*分母+分子;
减少();
}
//具有两个参数的构造函数
公共分数(整数分子、整数分母)
{
整数=0;
分子=分子;
分母=分母;
减少();
} 
//具有设置值的无参数
公共分数()
{
整数=0;
分子=0;
分母=1;
}
公共静态分数运算符+(分数第一分数,分数第二分数)
{
if(第一分数.分母==第二分数.分母)
{
int firstProduct=(firstfraction.WholeNumber*firstfraction.Denominor)+firstfraction.Numerator;
int secondProduct=(secondfraction.WholeNumber*secondfraction.deminator)+secondfraction.molector;
返回(新分数(第一个产品+第二个产品,第一个分数.分母));
}
其他的
{
int commondenominator=第一分数。分母*第二分数。分母;
int firstProduct=((firstfraction.WholeNumber*firstfraction.deminator)+firstfraction.molector)*secondfraction.deminator;
int secondProduct=((secondfraction.WholeNumber*secondfraction.deminator)+secondfraction.molector)*firstfraction.deminator;
返回(新分数(第一个产品+第二个产品,共分母));
}
} 
公共分数减少(整数、分子、分母)
{
int reduceWhole=(int)整数;
while(分子>分母)
{
分子-=分母;
还原整体+=1;
}
while(分母%分子==0)
{
整数因子=(整数)分母/分子;
分子=1;
分母=因子;
}
返回新分数(整型、分子、分母);
} 
}//末级
班级计划
{
静态void Main(字符串[]参数)
{
分数firstfraction=新分数();
分数secondfraction=新分数();
总分数=第一分数+第二分数;
控制台写入线(总计);
控制台。写入(“输入分数的整数部分:”);
firstfraction.WholeNumber=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入分子:”);
firstfraction.Numerator=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入分母:”;
firstfraction.denominor=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入分数的整数部分:”);
secondfraction.WholeNumber=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入分子:”);
secondfraction.Numerator=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入分母:”;
secondfraction.Denominor=Convert.ToInt32(Console.ReadLine());
Console.Write(“{0}{1}/{2}”,firstfraction.WholeNumber,firstfraction.Numerator,
第一分母);
Console.WriteLine(“+{0}{1}/{2}”),secondfraction.WholeNumber,
二次分数。分子,二次分数。分母);
分数相加=新分数();
加法=第一分数+第二分数;
Write(“两个分数相加的结果是:{0}{1}/{2}”),add.WholeNumber,
添加分子,添加分母);
Console.ReadLine();
}//端干管
}//末级
现在我收到3条错误消息,上面写着属性或索引器

无法在此上下文中使用“FractionProgram.Fraction.Denominor”,因为集合访问器不可访问


另外,我对firstProduct和secondProduct的计算是否正确?

我不会为您解答这个问题,但我会给您一些提示,帮助您自己解决问题并学习

冷杉
public int WholeNumber { get; private set; }
public int Numerator { get; private set; }
public int Denominator { get; private set; }
private void Reduce()
{
    if (Numerator < Denominator)
    {
        WholeNumber = 0;
        return;
    }
    if (Numerator == Denominator)
    {
        WholeNumber = 1;
        Numerator = 0;
        return;
    }
    if (Numerator > Denominator)
    {
        WholeNumber = (int)Math.Floor((decimal)Numerator / Denominator);
        Numerator = Numerator - WholeNumber * Denominator;
    }
}
//constructor with three parameters
public Fraction(int wholenumber, int numerator, int denominator)
{
    WholeNumber = wholenumber;
    Numerator = WholeNumber * denominator + numerator;
    Denominator = denominator;

    Reduce();
}

//constructor with two parameters
public Fraction(int numerator, int denominator)
{
    WholeNumber = 0;
    Numerator = numerator;
    Denominator = denominator;
    Reduce();
}
public static Fraction operator+(Fraction firstfraction, Fraction secondfraction)
{
    if (firstfraction.Denominator == secondfraction.Denominator)
    {
        int firstProduct = (firstfraction.WholeNumber * firstfraction.Denominator) + firstfraction.Numerator;
        int secondProduct = (secondfraction.WholeNumber * secondfraction.Denominator) + secondfraction.Numerator;
        return (new Fraction(firstProduct + secondProduct, firstfraction.Denominator));
    }
    else
    {
        int commondenominator = firstfraction.Denominator * secondfraction.Denominator;
        int firstProduct = ((firstfraction.WholeNumber * firstfraction.Denominator) + firstfraction.Numerator) * secondfraction.Denominator;
        int secondProduct = ((secondfraction.WholeNumber * secondfraction.Denominator) + secondfraction.Numerator) * firstfraction.Denominator;
        return (new Fraction(firstProduct + secondProduct, commondenominator));
    }
}