임의로 3/7, 1/3을 넣어서 4칙연산하는 소스인데요..
문제점을 좀 지적 부탁드립니다.
제눈에는 통 안보이네요..ㅡ.ㅡ;
using System;
namespace Rational
{
class Rational
{
private int numerator;
private int denominator;
public Rational()
{
numerator = 0;
denominator = 1;
}
public Rational(int num, int denom)
{
numerator = num;
denominator = denom;
makeRational();
}
private int greatestCommonDivisor(int n, int d)
{
int remainder = n % d;
while (remainder != 0)
{
n = d;
d = remainder;
remainder = n % d;
}
return d;
}
private void makeRational()
{
int gcd;
int divisor = 0;
gcd = greatestCommonDivisor(numerator, denominator);
numerator = numerator / gcd;
denominator = denominator/ gcd;
if (numerator == 0 || denominator == 0)
denominator = Math.Abs(denominator);
else
{
divisor = greatestCommonDivisor(Math.Abs(numerator),
Math.Abs(denominator));
if (denominator > 0)
{
numerator = numerator / divisor;
denominator = denominator / divisor;
}
else
{
numerator = numerator / (-divisor);
denominator = denominator / (-divisor);
}
}
}
public Rational add(Rational x, Rational y)
{
numerator = x.numerator * y.denominator + y.numerator * x.denominator;
denominator = x.denominator * y.denominator;
makeRational();
return this;
}
public Rational subtract(Rational x, Rational y)
{
numerator = x.numerator * y.denominator - y.numerator * x.denominator;
denominator = x.denominator * y.denominator;
makeRational();
return this;
}
public Rational multiply(Rational x, Rational y)
{
numerator = x.numerator * y.numerator;
denominator = x.denominator * y.denominator;
makeRational();
return this;
}
public Rational divide(Rational x, Rational y)
{
numerator = x.numerator * y.denominator;
denominator = x.denominator * y.numerator;
makeRational();
return this;
}
public String toString()
{
if (denominator == 1)
return numerator.ToString();
else
return numerator.ToString() + "/" + denominator.ToString();
}
public double toDouble()
{
double dblRet = 0;
dblRet = (double)numerator / (double)denominator;
return dblRet;
}
public bool equals(Rational x)
{
return ((this.numerator == x.numerator) &&
(this.denominator == x.denominator));
}
public Rational copy()
{
Rational temporary = new Rational(this.numerator, this.denominator);
return temporary;
}
}
class Exam
{
public static void Main(string[] args)
{
Rational a = new Rational(3, 8);
Rational b = new Rational(1, 3);
Rational c = new Rational();
Console.WriteLine("a= {0}" ,a);
Console.WriteLine("b= {0}" ,b);
Console.WriteLine("a+b= {0}",c.add(a, b));
Console.WriteLine("a-b= {0}",c.subtract(a,b));
Console.WriteLine("a*b= {0}",c.multiply(a,b));
Console.WriteLine("a/b= {0}",c.divide(a,b));
}
}
}
첫댓글 에러를 알려주세요 ㅡㅡ; 소스가 너무 많네요.. ^^
에러는 없어요...^^;;; 값이 다르게 나와서 질문하시는거죠..^^;;;
한줄만 바꾸면 되겠네요.. 음.. 아마도 toString() 메소드 이름을 이렇게 바꿔보세요.. public override String ToString() 잠와 ~_~
그나저나.. 이거 리포트죠 ㅡㅡ?
와 자바워크님 정말 감사합니다..바로 되네요^^
자바워크님 대단해요~ Syntex Error을 찾으시다니 ^^;