package test;
public class Rational{
private int molecule = 0;//分子
private int denominator = 0;//分母
public Rational(int molecule, int denominator) {
this.molecule = molecule;
this.denominator = denominator;
}
public int getMolecule() {
return molecule;
}
public void setMolecule(int molecule) {
this.molecule = molecule;
}
public int getDenominator() {
return denominator;
}
public void setDenominator(int denominator) {
this.denominator = denominator;
}
@Override
public String toString() {
int m =1;
int x = this.molecule;
int y = this.denominator;
if(this.molecule%this.denominator==0)
{
return this.molecule/this.denominator+"";
}
else
{
if(x<y)
{
int temp = x;
x=y;
y=temp;
}
while(y!=0)
{
m=x%y;
x=y;
y=m;
}
return (this.molecule/x)+"/"+(this.denominator/x);
}
}
public Rational rationalAdd(Rational x) {//加法
int a=this.molecule*x.denominator+x.molecule*this.denominator;
int b=this.denominator*x.denominator;
return new Rational(a,b);
}
public Rational rationalSub(Rational x) {//减法
int a=this.molecule*x.denominator-x.molecule*this.denominator;
int b=this.denominator*x.denominator;
return new Rational(a,b);
}
public Rational rationalMul(Rational x) {//乘法
int a=this.molecule*x.molecule;
int b=this.denominator*x.denominator;
return new Rational(a,b);
}
public Rational rationalDiv(Rational x) {//除法
int a=this.molecule*x.denominator;
int b=this.denominator*x.molecule;
return new Rational(a,b);
}
public double rationalSqrt() {//开平方
double x;
x=1.0*this.molecule/this.denominator;
double num = Math.sqrt(x);
return num;
}
public int compareTo(Rational x) {//比较大小
if(this.rationalSub(x).getMolecule()>0)
return 1;
else if(this.rationalSub(x).getMolecule()<0)
return -1;
else
return 0;
}
public double doubleValue() {//转化为double类型
return 1.0*this.molecule/this.denominator;
}
public int intValue() {//转化为int类型
return (int)doubleValue();
}
public long longValue() {//转化为long类型
return (long)doubleValue();
}
}
测试代码
package test;
import java.util.Scanner;
public class pta {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入四个数字构成两个有理数分数");
Rational a = new Rational(sc.nextInt(), sc.nextInt());
Rational b = new Rational(sc.nextInt(), sc.nextInt());
System.out.println("两个有理数相加结果");
System.out.println(a.rationalAdd(b));
System.out.println("两个有理数相减结果");
System.out.println(a.rationalSub(b));
System.out.println("两个有理数相乘结果");
System.out.println(a.rationalMul(b));
System.out.println("两个有理数相除结果");
System.out.println(a.rationalDiv(b));
System.out.println("两个数分别开平方的结果");
System.out.println(a.rationalSqrt());
System.out.println(b.rationalSqrt());
System.out.println("比较两个有理数大小结果:大于输出1,等于输出0,小于输出-1");
System.out.println(a.compareTo(b));
System.out.println("将两个有理数转换成字符串型");
System.out.println(a.toString());
System.out.println(b.toString());
System.out.println("将两个有理数转化为double类型");
System.out.println(a.doubleValue());
System.out.println(b.doubleValue());
System.out.println("将两个有理数转化为int类型");
System.out.println(a.intValue());
System.out.println(b.intValue());
System.out.println("将两个有理数转化为long类型");
System.out.println(a.longValue());
System.out.println(b.longValue());
}
}
结果
输入四个数字构成两个有理数分数
1 2 3 1
两个有理数相加结果
7/2
两个有理数相减结果
5/-2
两个有理数相乘结果
3/2
两个有理数相除结果
1/6
两个数分别开平方的结果
0.7071067811865476
1.7320508075688772
比较两个有理数大小结果:大于输出1,等于输出0,小于输出-1
-1
将两个有理数转换成字符串型
1/2
3
将两个有理数转化为double类型
0.5
3.0
将两个有理数转化为int类型
0
3
将两个有理数转化为long类型
0
3
尝试回答与c语言的有理数代码相比较,为什么你设计的类更加面向对象?
c语言是面向过程编程,用c语言来编写Rational就需要用不同的函数来实现,而java是面向对象编程,用java来编写Rational就需要设置不同的属性跟方法,创建新的对象后调用其方法来实现代码。我设计的有理数类,考虑了有理分数的属性,编写了加分 减法等方法。
尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。 别人如何复用你的代码?将我的类导入即可,因为我用的是public来修饰
别人的代码是否依赖你的有理数类的内部属性?当你升级了你的有理数类,将其的属性名改变时。是否会影响他人以前编写的调用你有理数类的代码(假设他将使用了你升级后有理数类)?用了我的代码肯定得依赖我的有理数类的属性,不会影响,因为我的代码的有理数的属性使用的是private,当修改时,不会影响他人调用我的有理数代码。
有理数类的public方法是否设置合适?为什么有的方法设置为private?合适,有理数类的public方法可以方便随时抽取调用,因为有一些我不希望别人访问的方法,这些就需要设置成private
你的类里面有static属性或方法吗?如果有,为什么要设置为static的?无
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)