设计一个分数类,分数的分子和分母用两个整型数表示,类中定义方法对分数进行加,减,乘,除运算。定义分数类对象,运算并输出运算结果。
首先这道题考察的是对java类和方法的运用。 1,定义一个Grade类,作为分数类,定义六个整型数分别存放两个分数的分子和分母与结果分数的分子和分母。
int numerator1,denominator1; //第一个分数的分子,分母 int numerator2,denominator2; //第二个分数的分子,分母 int numerator3,denominator3;2,构造方法,便于测试,将两个分数输入。
public Grade(int numerator1,int denominator1,int numerator2,int denominator2){ this.numerator1 = numerator1; this.denominator1 = denominator1; this.numerator2 = numerator2; this.denominator2 = denominator2; }3,接下来便是对两个分数进行运算,可以定义一个方法,输入需要的运算符(我是初学java,如何输入并识别±*/,不懂,所以可是事先将运算符声明,如用1234或者add,minus,ride和divide表示) 然后通过switch进行判断分别操作,而接下来便发现了另一个比较麻烦的事,那便是运算后的结果还需化简,这个每种运算都必不可缺,所以化简代码可以放在switch外面或者干脆在定义一个方法,每一个case中调用这个方法对结果经行化简。
化简部分方法代码
public int Factor(int a,int b){ int factor = 1; if (a < b){ //让b小于a int temp = b; b = a; a = temp; } for(int i = b;i > 1;i--){ if (a % i == 0 && b % i == 0){ factor = i; break; } } return factor; }然后在调试时有发现一个问题,在减法中结果可能为负或者是0,这便需要在减法中再次定义一个变量存放符号(说白了就是再int一个t,如果原结果分子s小于零,t=-s,同理大于零)
运算部分代码
public void Operation(String operation){ int n,m,p,q,r = 1,s,t = 0; n = numerator1 * numerator2; m = denominator1 * denominator2; p = denominator1 * numerator2; q = denominator2 * numerator1; switch(operation){ case "add": //加 r = p + q; s = Factor(r,m); denominator3 = m / s; numerator3 = r / s; break; case "minus": //减 r = q - p; if(r > 0){ t = r; }else if(r == 0){ denominator3 = 0; numerator3 = 0; break; }else if(r < 0){ t = -r; } s = Factor(t,m); denominator3 = m / s; numerator3 = t / s; break; case "ride": //乘 s = Factor(n,m); denominator3 = m / s; numerator3 = n / s; break; case "divide": //除 s = Factor(p,q); denominator3 = p / s; numerator3 = q / s; break; default: System.out.println("输入算法错误"); break; } System.out.print(numerator1 + "/" + denominator1); System.out.print(" " + operation + " "); System.out.print(numerator2 + "/" + denominator2); System.out.print(" = "); //这一堆判断,主要用于减法,结果存在等于0和小于零的情况。 if(numerator3 == denominator3 && r != 0){ System.out.println("1"); }else if(numerator3 == denominator3 && r == 0){ System.out.println("0"); }else if(r < 0){ System.out.println("-" + numerator3 + "/" + denominator3); }else if(r > 0){ System.out.println(numerator3 + "/" + denominator3); } }然后重新定义一个GradeText测试类,对上述分数类进行测试
public class GreadText { public static void main(String args[]){ // add: + ,minus: - ,ride: * ,divide: / . Grade p1 = new Grade(5,4,3,2); p1.Operation("add"); p1.Operation("minus"); p1.Operation("ride"); p1.Operation("divide"); } }运行结果如下: 这便是这道题的一种思路,可以在这种思路下进行修改,将功能完善优化一下。