嗨,所以我有我的主课,但我很难搞清楚如何从我的测试类输出我的代码。我不明白,尽管尝试了很多方法如何输出两个分数的简单加法和减法,因为它应该在我的主方法中做,但似乎无法将它带入我的测试类。
这是我的代码,包含所有函数:
package rational;
public class Rational {
private int numer, denom;
//constructors
public Rational(){
int num = 1;
int den = 2;
reduce();
}
public Rational(int num, int den){
numer = num;
denom = den;
reduce();
}
public Rational(Rational x){
numer = x.numer;
denom = x.denom;
reduce();
}
//setters
public void setNumer(int num){
numer = num;
reduce();
}
public void setDenom(int den){
denom = den;
reduce();
}
public void setRational(int num, int den){
numer = num;
denom = den;
reduce();
}
//getters
public int getNumer(){
return numer;
}
public int getDenom(){
return denom;
}
//Copy method
public void copyFrom(Rational x){
numer = x.numer;
denom = x.denom;
reduce();
}
//Equals method
public boolean equals(Rational x){
if (numer / denom == x.numer / x.denom){
return(true);
}
else {
return(false);
}
}
//Compare to method
public int compareTo(Rational x){
if (numer / denom == x.numer / x.denom){
return (0);
}
else if (numer / denom < x.numer / x.denom){
return (-1);
}
else{
return (1);
}
}
//Find greatest common divisor
static int gcd(int x, int y){
int r;
while (y != 0) {
r = x % y;
x = y;
y = r;
}
return x;
}
//Rational Addition
public void plus(Rational x){
int greatdenom = x.denom * denom;
int multx = greatdenom / x.denom;
int mult = greatdenom / denom;
denom = x.denom * denom;
numer = (x.numer * multx) + (numer * mult);
reduce();
}
//Rational Subtraction
public void minus(Rational x){
int greatdenom = x.denom * denom;
int multx = greatdenom / x.denom;
int mult = greatdenom / denom;
denom = x.denom * denom;
if (x.numer > numer){
numer = (x.numer * multx) - (numer * mult);
}
else {
numer = (numer * mult) - (x.numer * multx);
}
reduce();
}
//Multiplication
public void times(Rational x){
numer = numer * x.numer;
denom = denom * x.denom;
reduce();
}
//Division
public void divBy(Rational x){
numer = numer / x.numer;
denom = denom / x.denom;
reduce();
}
//Fraction simplifier
private void reduce(){
int divisor;
divisor = Rational.gcd(numer, denom);
numer = numer / divisor;
denom = denom / divisor;
}
@Override
public String toString(){
if (denom == 1){
return numer + "";
}
else{
return numer + " / " + denom;
}
}
}
答案 0 :(得分:1)
您需要在plus方法中返回Rational(而不是void)。
public Rational plus(Rational x){
//do addition stuff.
return new Rational(//what numerator be//,//what denom should be//)
}
作为建议,我会将所有这些操作符方法设置为静态,并且也接受2个参数。然后你会使用&#34; getters&#34;对于两个有理数中的每一个&#39;分子和分母。
像这样:
public static Rational plus(Rational r1, Rational r2) {
int r1Num=r1.getNum();
int r1Denom=r1.getDenom();
int r2Num=r2.getNum();
int r2Denom=r2.getDenom();
//do all your plus stuff
return new Rational(//new num, //new denom);
}
答案 1 :(得分:0)
尝试将代码作为测试类。
示例代码测试类
public class TestRational
{
public static void main(String[] args)
{
Rational rational= new Rational(2,3);
rational.plus(rational);
System.out.print(rational.toString());
}
}
输出
4 / 3