📄 fraction.java
字号:
/////// Fraction.java ///////
package myrmi.fra;
import java.io.Serializable;
// serrializable fractions
public class Fraction implements Serializable
{
public Fraction() { } // default constructor
// constructor, d is not zero
public String toString() // override
{ return(num + "/" + denom);
}
public boolean equals(Fraction y) // fraction equality
{ return( num == y.num && denom == y.denom );
}
// The following equals method explained in chapter 4
public boolean equals(Object y) // override
{ return ( y == this ||
(this.getClass() == y.getClass()
&& num == ((Fraction)y).num
&& denom == ((Fraction)y).denom )
);
}
public boolean is_zero() { return(denom == 1 && num == 0); }
public boolean is_one() { return(denom == 1 && num == 1); }
public boolean is_int() { return denom==1; }
public static int gcd(int a, int b)
{ a = Math.abs(a);
b = Math.abs(b);
if ( a == 0 ) return b; // 0 is error value
if ( b == 0 ) return a;
int t;
while ( b > 0 )
{ t = a % b;
a = b;
b = t;
}
return (a);
}
public Fraction(int n, int d) // d is not zero
{ int g;
if ( d == 0 )
{ System.err.println(
"Fraction: fraction with 0 denominator?");
System.exit(1);
}
if (n == 0)
{ num = 0;
denom = 1;
return;
}
if (d < 0)
{ n = -n;
d = -d;
}
if ( (g = gcd(n,d)) != 1 ) // remove gcd
{ n /= g;
d /= g;
}
num = n;
denom = d;
}
public boolean less(Fraction y)
{ return( ( num * y.denom < denom * y.num ) ); }
public boolean greater(Fraction y)
{ return( ( num * y.denom > denom * y.num ) ); }
public boolean greater_eq(Fraction y)
{ return( ( num * y.denom >= denom * y.num ) ); }
public boolean less_eq(Fraction y)
{ return( ( num * y.denom <= denom * y.num ) ); }
public int floor()
{ if ( num >= 0 ) return( num % denom );
else return(-1 - (-num % denom));
}
public int ceiling()
{ if ( num >= 0 ) return(1 + (num % denom));
else return ( 1 - (-num % denom) );
}
public Fraction divide(Fraction y)
{ return new Fraction( num * y.denom, denom * y.num ); }
public Fraction times(Fraction y)
{ return new Fraction( num * y.num, denom * y.denom ); }
public Fraction plus(Fraction y)
{ if ( num == 0 )
return makeFraction(y.num, y.denom);
else if ( y.num == 0 )
return makeFraction(num, denom);
else
return( new Fraction( num * y.denom + y.num * denom,
denom * y.denom ) );
}
public Fraction minus()
{ return makeFraction(-num, denom); }
public Fraction minus(Fraction y)
{ if ( num == 0 ) // trivial cases
return makeFraction(-y.num, y.denom);
else if ( y.num == 0 )
return this;
else // sub fractions
return( new Fraction( num * y.denom - y.num * denom,
denom * y.denom ) );
}
private Fraction makeFraction(int n, int d)
{ Fraction f = new Fraction();
f.num = n;
f.denom = d;
return f;
}
// data members
private int num; // numerator
private int denom; // denominator
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -