目录
1.有理数类的代码
//凡是可以写成numerator/denominator(分子,分母为整数且分子≠0)形式的数,都是有理数
public class Rational {
private long numerator;//分子
private long denominator;//分母
//求最大公约数,简化有理数,方便计算
public static long gcd(long n,long d){
if(d==0)
{
return 0;
}
return gcd(d,n%d);
}
public Rational(long n, long d) {
numerator=n;
denominator=d;
long Gcd=gcd(numerator,denominator);
if(Gcd>=1)
{
numerator/=Gcd;
denominator/=Gcd;
}
}
//加法
public Rational add(Rational num){
long n=numerator*num.denominator+denominator*num.numerator;
long d=denominator*num.denominator;
return new Rational(n,d);
}
//减法
public Rational subtract(Rational num){
long n=numerator*num.denominator-denominator*num.numerator;
long d=denominator*num.denominator;
return new Rational(n,d);
}
//乘法
public Rational multiply(Rational num){
long n=numerator*num.numerator;
long d=denominator*num.denominator;
return new Rational(n,d);
}
//除法
public Rational divide(Rational num){
long n=numerator*num.denominator;
long d=denominator*num.numerator;
return new Rational(n,d);
}
//转化为字符串
public String toString(){
if(denominator==1)//分母为1,直接表示分子即可
{
return "" + numerator;
}
return numerator + "/" + denominator;
}
}
2.测试代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
int d=sc.nextInt();
Rational firstNum = new Rational(a,b);//第一个有理数
Rational secondNum = new Rational(c,d);//第二个有理数
Rational Add = firstNum.add(secondNum);//加法
Rational Subtract = firstNum.subtract(secondNum);//减法
Rational Multiply = firstNum.multiply(secondNum);//乘法
Rational Divide = firstNum.divide(secondNum);//除法
//输出
System.out.println(firstNum + "+" + secondNum + "=" + Add);
System.out.println(firstNum + "-" + secondNum + "=" + Subtract);
System.out.println(firstNum + "×" + secondNum + "=" + Multiply);
System.out.println(firstNum + "÷" + secondNum + "=" + Divide);
}
}
}
3.测试结果
4.尝试描述怎么与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
c语言和Java的部分功能是类似的,但是Java更加面向对象,C语言更面向过程。因为Java在类里把类的属性方法都写清楚了,在同一个包里的另一个class中就可以直接用。
5.尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。
1)别人如何复用你的代码?
导入包中的有理数类,如:import java.util.Rational;
2)别人的代码是否依赖你的有理数类的属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
别人的代码会依赖于我的有理数类的属性;当我的有理数类的属性修改时,不会影响他人调用我的有理数类的代码,因为设置成为private类型。
3)有理数类的public方法是否设置合适?为什么有的方法设置为private?
合适;因为public是公有的,private是私有的,有的方法设置成private,别的类就不能通过该private方法访问该变量,只限于自己使用,这样可以防止使用者不小心对数据修改造成程序错误。
缺月挂疏桐,漏断人初静。时见幽人独往来,缥缈孤鸿影。
惊起却回头,有恨无人省。拣尽寒枝不肯栖,寂寞沙洲冷。