定义一个类Fact表示无符号有理数(分数),成员有分子(num)和分母(den) 构造函数2个 一组get方法 一组set方法 方法: 输入分数方法 -比较两个分数的大小,结果为boolean的值 -对分数进行约分(分子分母同时除以最大公约数) -对两个分数进行通分(先约分) -两个分数相加,结果为不可约数(先通分,然后再约分) 显示分数方法 定义testFact类, 创建Fact对象,并调用各个方法
代码如下(示例):
package fact; public class Fact { private int num;//分子 private int den;//分母 public Fact(){ } public Fact(int num,int den){ setNum(num); setDen(den); } // 构造函数 public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getDen() { return den; } public void setDen(int den) { this.den = den; } //求最大公约数(辗转相除法) public int maxgongyueshu(int n,int m){ int temp; //保证m>n if(m<n){ temp=m; m=n; n=temp; } while(n!=0){ temp=n; n=m%n; m=temp; } return m; } //对一个分数约分 public void yuefen(){ int maxgongyueshu= maxgongyueshu(num,den); setNum(num/maxgongyueshu); setDen(den/maxgongyueshu); } //对两个分数进行通分 (两个数已经单独约分了) public void tongfen(Fact second){ int maxgongyueshu=maxgongyueshu(this.den,second.den ); int temp1=this.den/maxgongyueshu; int temp2=second.den/maxgongyueshu; this.num=this.num*temp2; this.den=this.den*temp2; second.num=second.num*temp1; second.den=second.num*temp1; } //对两数比较大小(大于等于输出true,小于等于输出false) public boolean bijiao(Fact second){ tongfen(second); if (this.num>=second.num) return true; return false; } //两个分数相加(已经通分过了) public void add(Fact second){ Fact temp = new Fact(); temp.setDen ( this.den ); temp.setNum(this.num + second.num); temp.yuefen(); System.out.print(temp.num+"/"+temp.den); } //显示分数(不换行) public void print (){ yuefen(); if(this.den==this.num&&this.num==1) System.out.print("1"); else System.out.print(this.num+"/"+this.den); } //显示分数(换行) public void println (){ yuefen(); if(this.den==this.num&&this.num==1) System.out.println("1"); else System.out.println(this.num+"/"+this.den); } }代码如下(示例):
package fact; import java.util.*; public class TestFact { public static void main (String[] args){ System.out.println("输入第一个分数的分子和分母"); Scanner scanner =new Scanner(System.in); Fact a = new Fact(scanner.nextInt(),scanner.nextInt()); System.out.println("输入第二个分数的分子和分母"); Fact b = new Fact(scanner.nextInt(),scanner.nextInt()); System.out.print("两个分数约分后为:"+a.getNum()+"/"+a.getDen() ); System.out.print("和"); b.println(); System.out.println("第一个分数大于等于第二个分数:"+a.bijiao(b)); System.out.print("两数相加结果为:"); a.add(b); } }构造函数,这个是我上周实验都没有理解清楚的内容。这一次实验我对它有了一份理解。set是写,get是读。只有通过这两个函数才能修改类里面的属性的值。美中不足的是,没想明白怎么把类回传到主函数(在进行加法时,我新建了一个和的类,在想不清楚怎么回传后,就直接在函数中输出结果)。
但对于输出还是不太想弄明白怎么处理的,只是按照书上的照敲罢了。 关于运算,加减乘我都想清楚了,但对于除法,一点思绪都没有。如果把除法转换成乘以被除数的倒数,说不定可以。但老师没有要求的就没有尝试了。