个人项目总结
个人项目的大部分设计都在上一篇博客中描述的比较清楚。
下面描述一下个人项目最终版本和上次描述的不同。
一、分数除零不再作为一个异常,而是融入到控制流中区判断。原因是随机生成的表达式中除0并不是稀有事件,为了更好的用户体验,最终的分数类为:
public class Fraction { private int numer; // numerator private int denom; // denominator public Fraction(int numer,int denom){ this.numer=numer; this.denom=denom; } public Fraction(int numer){ this.numer=numer; this.denom=1; } public int getNumer(){ return numer; } public int getDenom(){ return denom; } public void setNumer(int numer){ this.numer=numer; } public void setDenom(int denom){ this.denom=denom; } public String toString(){ simplfy(); if(denom==1) return numer+""; else{ if(denom<0){ denom*=-1; numer*=-1; } return numer+"/"+denom;} } public int gcd(int a,int b){ while(a%b!=0){ int temp=a%b; a=b; b=temp; } return b; } public int lcm(int a,int b){ return a*b/gcd(a,b); } public void simplfy(){ int a=gcd(numer,denom); numer/=a; denom/=a; } public Fraction add(Fraction op2){ int newdenom=lcm(denom,op2.denom); int newnumer=numer*newdenom/denom+op2.numer*newdenom/op2.denom; Fraction f=new Fraction(newnumer,newdenom); f.simplfy(); return f; } public Fraction minus(Fraction op2){ int newdenom=lcm(denom,op2.denom); int newnumer=numer*newdenom/denom-op2.numer*newdenom/op2.denom; Fraction f=new Fraction(newnumer,newdenom); f.simplfy(); return f; } public Fraction multi(Fraction op2){ Fraction f=new Fraction(numer*op2.numer,denom*op2.denom); f.simplfy(); return f; } public Fraction divide(Fraction op2) { Fraction f=new Fraction(numer*op2.denom,denom*op2.numer); f.simplfy(); return f; } public static void main(String[] args){ Fraction f=new Fraction(-4,6); f.simplfy(); System.out.println(f); } }