C# 控制台赢得';t打印出我的方法中的信息
当我尝试输出方法调用时,我会看到一个空白屏幕,当我按下任何键时,我会显示名称空间,然后控制台会关闭。有人看到我在这里遗漏了什么吗C# 控制台赢得';t打印出我的方法中的信息,c#,console,C#,Console,当我尝试输出方法调用时,我会看到一个空白屏幕,当我按下任何键时,我会显示名称空间,然后控制台会关闭。有人看到我在这里遗漏了什么吗 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace programming_2 { class Driver { static void Main(strin
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!!");
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间编程\u赋值\u 2
{
类别分数:iClonable、IEnumerable、IEnumerator、IComparer
{
私有整数,den;
//建设者
公共分数()
{
初始化(0,1);
}
公共分数(整数)
{
CheckMinValue(num);
初始化(num,1);
}
公共分数(分数f)
{
初始化(f.num,f.den);
}
公共分数(整数、整数)
{
校验分母零(den);
CheckMinValue(num);
校验最小值(den);
分数f=新分数((十进制)num,(十进制)den);
初始化(f.num,f.den);
}
私有静态void CheckMinValue(int n)
{
如果(n==int.MinValue)
抛出新的OverflowException();
}
私有void初始化(int num,int den)
{
this.num=num;
this.den=den;
}
专用分数(十进制r1,十进制r2)
{
十进制gcd=gcd(数学Abs(r1),数学Abs(r2));
int num=(int)(r1/gcd);
内部数据=(内部数据)(r2/gcd);
CheckMinValue(num);
校验最小值(den);
if(r2<0)
{
num=-num;
den=-den;
}
this.num=num;
this.den=den;
}
公共整数分子
{
获取{返回this.num;}
}
公共整数分母
{
获取{返回this.den;}
}
//重载运算符(+-*/^)
//加
公共静态分数运算符+(分数a、分数b)
{
十进制d1=(十进制)a.num*b.den+(十进制)b.num*a.den;
十进制d2=(十进制)a.den*b.den;
返回新分数(d1,d2);
}
公共静态分数运算符+(分数a,整数b)
{
返回a+新分数(b);
}
公共静态分数运算符+(整数a,分数b)
{
返回新分数(a)+b;
}
//减除
公共静态分数运算符-(分数a,分数b)
{
十进制r1=(十进制)a.num*b.den-(十进制)b.num*a.den;
十进制r2=(十进制)a.den*b.den;
返回新分数(r1,r2);
}
公共静态分数运算符-(分数a,整数b)
{
返回a-新分数(b);
}
公共静态分数运算符-(整数a,分数b)
{
返回新分数(a)-b;
}
//倍增
公共静态分数运算符*(分数a,分数b)
{
十进制r1=(十进制)a.num*b.num;
十进制r2=(十进制)a.den*b.den;
返回新分数(r1,r2);
}
公共静态分数运算符*(分数a,整数b)
{
返回a*新分数(b);
}
公共静态分数运算符*(整数a,分数b)
{
返回新分数(a)*b;
}
//分开
公共静态分数运算符/(分数a,分数b)
{
十进制r1=(十进制)a.num*b.den;
十进制r2=(十进制)a.den*b.num;
如果(r2==0)
抛出新的DivideByZeroException();
其他的
返回新分数(r1,r2);
}
公共静态分数运算符/(分数a,整数b)
{
返回a/新分数(b);
}
公共静态分数运算符/(整数a,分数b)
{
返回新分数(a)/b;
}
//倡导者
公共静态分数运算符^(分数a,整数n)
{
返回新分数((十进制)Math.Pow(a.num,n),(十进制)Math.Pow(a.den,n));
}
//比较运算符
公共静态布尔运算符==(分数a,分数b)
{
返回(十进制)a.num*b.den==(十进制)b.num*a.den;
}
公共静态布尔运算符!=(分数a,分数b)
{
返回(!(a==b));
}
公共静态布尔运算符>(分数a、分数b)
{
返回(十进制)a.num*b.den>(十进制)b.num*a.den;
}
公共静态布尔运算符>=(分数a、分数b)
{
返回(!(a公共静态布尔运算符什么是分数类?它是否有一个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);
}
您没有调用frac
对象的任何方法。最好向我们展示分数
类的定义。@steveneck-我可能是瞎子…但我看不到您在哪里重写了ToString…但是构造函数中还有一些其他问题。为什么您需要构造函数中的另一个类实例,而在初始化任何内容之后,我会将要发生什么?我刚刚复制/粘贴了您的代码,它对我来说运行良好(在重写ToString()之后).是的,也有一个。我所有的方法和一切似乎都井然有序,我几周前才开始使用C#,但我似乎无法在屏幕上看到任何信息console@steveneck你能把分数类的代码粘贴进去吗?@GrantWinney啊,说得好。我想这不是问题所在,但仍然是问题所在