控制台获胜';我不打印出我的方法中的信息

本文关键字:我的 方法 信息 打印 获胜 控制台 | 更新日期: 2023-09-27 18:24:19

当我试图输出方法调用时,我会得到一个空白屏幕,当我按下任何键时,我都会显示命名空间,然后控制台就会关闭。有人看到我在这里缺了什么吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace programming_2
{
class Driver 
{
    static void Main(string[] args)
    {
        fraction frac = new fraction(); // we'll get 0/1
        frac = new fraction(1, 5);       // we'll get 1/5
       // frac = new fraction(25);        // we'll get 25/1
        //frac = new fraction(9.25);      // we'll get 37/4
        //frac = new fraction("6.25");    // we'll get 25/4
        //frac = new fraction(System.Console.ReadLine());

        Console.Write(frac);
        // displays the current value of frac object;
        Console.WriteLine("Press any key to continue..");
        Console.ReadKey();
    }
}
}

馏分类别

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace programming_assignment_2
{
 class fraction :  ICloneable, IEnumerable<fraction>, IEnumerator<fraction>, IComparer<fraction>
{
        private int num, den;
        // Constructors
        public fraction()
        {
            Initialize(0, 1);
        }
        public fraction(int num)
        {
            CheckMinValue(num);
            Initialize(num, 1);
        }
        public fraction(fraction f)
        {
            Initialize(f.num, f.den);
        }
        public fraction(int num, int den)
        {
            CheckDenominatorZero(den);
            CheckMinValue(num);
            CheckMinValue(den);
            fraction f = new fraction((decimal)num, (decimal)den);
            Initialize(f.num, f.den);
        }
        private static void CheckMinValue(int n)
        {
            if (n == int.MinValue)
                throw new OverflowException();
        }
        private void Initialize(int num, int den)
        {
            this.num = num;
            this.den = den;
        }
        private fraction(decimal r1, decimal r2)
        {
            decimal gcd = GCD(Math.Abs(r1), Math.Abs(r2));
            int num = (int)(r1 / gcd);
            int den = (int)(r2 / gcd);
            CheckMinValue(num);
            CheckMinValue(den);
            if (r2 < 0)
            {
                num = -num;
                den = -den;
            }
            this.num = num;
            this.den = den;
        }

        public int Numerator
        {
            get { return this.num; }
        }
        public int Denominator
        {
            get { return this.den; }
        }
        // Overloaded  Operators ( +-*/^ )
        // Add
        public static fraction operator +(fraction a, fraction b)
        {
            decimal d1 = (decimal)a.num * b.den + (decimal)b.num * a.den;
            decimal d2 = (decimal)a.den * b.den;
            return new fraction(d1, d2);
        }
        public static fraction operator +(fraction a, int b)
        {
            return a + new fraction(b);
        }
        public static fraction operator +(int a, fraction b)
        {
            return new fraction(a) + b;
        }

       // Substract
        public static fraction operator -(fraction a, fraction b)
        {
            decimal r1 = (decimal)a.num * b.den - (decimal)b.num * a.den;
            decimal r2 = (decimal)a.den * b.den;
            return new fraction(r1, r2);
        }
        public static fraction operator -(fraction a, int b)
        {
            return a - new fraction(b);
        }
        public static fraction operator -(int a, fraction b)
        {
            return new fraction(a) - b;
        }

        // Multiply
        public static fraction operator *(fraction a, fraction b)
        {
            decimal r1 = (decimal)a.num * b.num;
            decimal r2 = (decimal)a.den * b.den;
            return new fraction(r1, r2);
        }
        public static fraction operator *(fraction a, int b)
        {
            return a * new fraction(b);
        }
        public static fraction operator *(int a, fraction b)
        {
            return new fraction(a) * b;
        }

        // Divide
        public static fraction operator /(fraction a, fraction b)
        {
            decimal r1 = (decimal)a.num * b.den;
            decimal r2 = (decimal)a.den * b.num;
            if (r2 == 0)
                throw new DivideByZeroException();
            else
                return new fraction(r1, r2);
        }
        public static fraction operator /(fraction a, int b)
        {
            return a / new fraction(b);
        }
        public static fraction operator /(int a, fraction b)
        {
            return new fraction(a) / b;
        }

        // Exponents
        public static fraction operator ^(fraction a, int n)
        {
            return new fraction((decimal)Math.Pow(a.num, n), (decimal)Math.Pow(a.den, n));
        }

        // Comparison operators
        public static bool operator ==(fraction a, fraction b)
        {
            return (decimal)a.num * b.den == (decimal)b.num * a.den;
        }
        public static bool operator !=(fraction a, fraction b)
        {
            return (!(a == b));
        }
        public static bool operator >(fraction a, fraction b)
        {
            return (decimal)a.num * b.den > (decimal)b.num * a.den;
        }
        public static bool operator >=(fraction a, fraction b)
        {
            return (!(a < b));
        }
        public static bool operator <(fraction a, fraction b)
        {
            return (decimal)a.num * b.den < (decimal)b.num * a.den;
        }
        public static bool operator <=(fraction a, fraction b)
        {
            return (!(a > b));
        }


        public static decimal GCD(decimal a, decimal b)
        {
            if (b == 0)
                return a;
            return GCD(b, a % b);
        }
        private static void CheckDenominatorZero(decimal den)
        {
            if (den == 0)
                throw new ArithmeticException("The denominator can't be zero!!");
        }

    }


}

控制台获胜';我不打印出我的方法中的信息

什么是分数类?它有一个ToString()方法可以打印出来吗?

这对我有用。

static void Main(string[] args)
        {
            var frac = new fraction(1,5); 
            Console.WriteLine(frac);
           Console.WriteLine("Press any key to continue..");
            Console.ReadKey();
        }

public class fraction
    {
        public int nom { get; set; }
        public int denom { get; set; }
        public fraction(int n, int d)
        {
            nom = n;
            denom = d;
        }
        public override string ToString()
        {
            return string.Format("{0}''{1}", nom, denom);
        }
    }

在您的代码中,似乎有一个无尽的循环:

public fraction(int num, int den)
{
    CheckDenominatorZero(den);
    CheckMinValue(num);
    CheckMinValue(den);
    // You are creating a new instance in the creation of a new instance
    fraction f = new fraction((decimal)num, (decimal)den);
    Initialize(f.num, f.den);
}

试试这个:

    // Remove this line:
    fraction f = new fraction((decimal)num, (decimal)den);
    // And change the next line to this:
    Initialize(num, den);

更改后:

public fraction(int num, int den)
{
    CheckDenominatorZero(den);
    CheckMinValue(num);
    CheckMinValue(den);
    Initialize(num, den);
}

此外,正如其他人所说,您应该覆盖ToString,这样您的控制台输出看起来很好:

    public override string ToString()
    {
        return string.Format("{0}''{1}", this.num, this.den);
    }