zmj888
发贴: 22
积分: 0
|
于 2005-12-03 00:30
书上原文如下:这个案例学习的目的是设计并实现Rational类,代表对有理数的操作。一个有理数是两个整数的比值,通常以a/b的格式表示。称a为分子(numerator),b为分母(denominator)。分母不为零。基本操作有如下定义: 加法:(a/b)+(c/d)=(ad+bc)/bd; 减法:(a/b)-(c/d)=(ad+bc)/bd; 乘法:(a/b)*(c/d)=ac/bd; 除法:(a/b)/(c/d)=ad/bc; 分析和设计: 为了表示有理,需要表示它的分子和分母。这一必要性意味着一个表示有理数的类需要至少两个实例变量:一个变量代表该对象特定的分子,另一个变量代表该对象特定的分母。 private int numerator 相关有理数的分子 private int denominator 相关有理数的分母 有理数的抽象应该至少用如下方式提供方法初始化和操作有理数对象: 默认地构造一个有理数或者有一个分子和分母指定。 计算两个有理数进行加减乘除的结果 。 产生一个能够显示到标准输出流的字符窜代表有理数。 为了支持客户活动和信息隐藏,应该也有方法实现如下活动: 访问分子或分母的值 设置分子或分母的值
为了扶助读者设计必要的信息结构和算法,提供Rational的客户程序RationalDemo.java。程序输出结果如下(没有图只好大概写一下) Enter numerator of a rational number: 1 Enter denominator of a rational number:2
Enter numerator of a rational number: 1 Enter denominator of a rational number:3
For r=1/2 and s=1/3
r+s=5/6 r-s=1/6 r*s=1/6 r/s=3/2
以下是书中提供的RationalDemo.java代码
import java.io.*; public class RationalDemo { public static void main(String args[]) throws IOException { BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in)); System.out.println();
//获得有理数r和s的值 Rational r=new Rational(); System.out.print("Enter numerator of a rational number: "); int a=Integer.parseInt(stdin.readLine()); System.out.print("Enter denominator of a rational number: "); int b=Integer.parseInt(stdin.readLine()); r.setNumerator( a ); r.setDenominator( b ); System.out.println(); System.out.println();
Rational s=new Rational(); System.out.print("Enter numerator of a rational number: "); int c=Integer.parseInt(stdin.readLine()); System.out.print("Enter denominator of a rational number: "); int d=Integer.parseInt(stdin.readLine()); s.setNumerator( c ); s.setDenominator( d );
//在r和s上进行操作 Rational sum=r.add( s );//把两有理数相加的结果作为一个Rational对象,为了能调用toString方法 Rational difference=r.subtract( s ); Rational product=r.multiply( s ); Rational quotient=r.divide( s );
System.out.println("For r="+r.toString()+" s="+s.toString()); System.out.println("r+s="+sum.toString()); System.out.println("r-s="+difference.toString()); System.out.println("r*s="+product.toString()); System.out.println("r/s="+quotient.toString());
System.out.println();
} }
以下是我根据上面提示编写的Rational类,Rational.java
public class Rational{ private int numerator;//两有理数的分子以及相加后的分子 private int denominator;//两有理数的分母以及相加后的分母
//加法 public void add(Rational m){ numerator=(numerator*m.getDenominator())+(denominator*m.getNumerator());//得到新的分子 denominator=denominator*m.getDenominator();//得到新的分母
} //减法 public void subtract(Rational m){ numerator=(numerator*m.getDenominator())-(denominator*m.getNumerator()); denominator=denominator*m.getDenominator();
} //乘法 public void multiply(Rational m){ numerator=numerator*m.getNumerator(); denominator=denominator*m.getDenominator();
} //除法 public void divide(Rational m){ numerator=numerator*m.getDenominator(); denominator=denominator*m.getNumerator(); } //设置分子 public void setNumerator(int z){ numerator=z; } //设置分母 public void setDenominator(int z){ denominator=z; } //获得分子 public int getNumerator(){ return numerator;
} 获得分母 public int getDenominator(){ return denominator; }
public String toString(){ String s="numerator+\\+denominator"; return s;
}
}
在编译RationalDemo.java时出现这样的情况 谁帮我看看Rational.java的错误,谢谢
zmj888 edited on 2005-12-03 00:37
|