Chapter06--有理数和评委评分

来源:互联网 发布:暗影精灵2优化教程 编辑:程序博客网 时间:2024/05/01 09:38
有理数: public class Rational {int numerator=1;int denominator=1;//设置分子void setNumerator(int a){int c=f(Math.abs(a),denominator);//计算最大公约数numerator=a/c;denominator=denominator/c;if(numerator<0&&denominator<0){numerator=-numerator;denominator=-denominator;}}    //设置分母void setDenominator(int b){int c=f(numerator,Math.abs(b));//计算最大公约数numerator=numerator/c;denominator=b/c;if(numerator<0&&denominator<0){numerator=-numerator;denominator=-denominator;}}int getNumerator(){return numerator;}int getDenominator(){return denominator;}int f(int a,int b){//求a和b的最大公约数if(a==0) return 1;if(a<b){int c=a;a=b;b=c;}int r=a%b;while(r!=0){a=b;b=r;r=a%b;}return b;}Rational add(Rational r){//加法运算int a=r.getNumerator();//返回有理数r的分子int b=r.getDenominator();//返回有理数r的分母int newNumerator=numerator*b+denominator*a;//计算出新分子int newDenominator=denominator*b;//计算出新分母Rational result=new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}Rational sub(Rational r){//减法运算int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b-denominator*a;int newDenominator=denominator*b;Rational result=new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}Rational muti(Rational r){//乘法运算int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*a;int newDenominator=denominator*b;Rational result=new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}Rational div(Rational r){//除法运算int a=r.getNumerator();int b=r.getDenominator();int newNumerator=numerator*b;int newDenominator=denominator*a;Rational result=new Rational();result.setNumerator(newNumerator);result.setDenominator(newDenominator);return result;}}public class Test {public static void main(String[] args){Rational r1=new Rational();r1.setNumerator(1);r1.setDenominator(5);Rational r2=new Rational();r2.setNumerator(3);r2.setDenominator(2);Rational result=r1.add(r2);int a=result.getNumerator();int b=result.getDenominator();System.out.println("1/5+3/2="+a+"/"+b);result=r1.sub(r2);a=result.getNumerator();b=result.getDenominator();System.out.println("1/5-3/2="+a+"/"+b);result=r1.muti(r2);a=result.getNumerator();b=result.getDenominator();System.out.println("1/5×3/2="+a+"/"+b);result=r1.div(r2);a=result.getNumerator();b=result.getDenominator();System.out.println("1/5÷3/2="+a+"/"+b);int n=10,k=1;System.out.println("计算2/1+3/2+5/3+8/5+13/8+…的前"+n+"项和");Rational sum=new Rational();sum.setNumerator(0);Rational item=new Rational();item.setNumerator(2);item.setDenominator(1);while(k<=n){sum=sum.add(item);k++;int fenzi=item.getNumerator();int fenmu=item.getDenominator();item.setNumerator(fenzi+fenmu);item.setDenominator(fenzi);}a=sum.getNumerator();b=sum.getDenominator();System.out.println("用分数表示:");System.out.println(a+"/"+b);double doubleResult=(a*1.0)/b;System.out.println("用小数表示:");System.out.println(doubleResult);}}评委评分:package Pipeline;public class ComputerAver {      public void giveAver(double []b){      double sum=0;      for(int i=0;i<b.length;i++){      sum=sum+b[i];      }      double aver=sum/b.length;      System.out.println("选手最后得分"+aver);      }}package Pipeline;public class DelScore {ComputerAver computer;DelScore(ComputerAver computer){this.computer=computer;}    public void doDelete(double []a){    java.util.Arrays.sort(a);//数组a从小到大排序    System.out.print("去掉一个最高分 :"+a[a.length-1]+",");    System.out.print("去掉一个最低分:"+a[0]+"。");    double []b=new double[a.length-2];    for(int i=1;i<a.length-1;i++){//去掉最高分和最低分    b[i-1]=a[i];    }    computer.giveAver(b);    }}package Pipeline;import java.util.Scanner;public class InputScore {     DelScore del;     InputScore(DelScore del){     this.del=del;     }     public void inputScore(){     System.out.println("请输入评委数");     Scanner read=new Scanner(System.in);     int count=read.nextInt();     System.out.println("请输入各个评委的分数");     double []a=new double[count];     for(int i=0;i<count;i++){     a[i]=read.nextDouble();     }     del.doDelete(a);     }     }package Pipeline;public class Line {InputScore one;DelScore two;ComputerAver three;Line(){three=new ComputerAver();two=new DelScore(three);one=new InputScore(two);}public void givePersonScore(){one.inputScore();}}package Pipeline;public class SingGame {public static void main(String[] args){Line line=new Line();line.givePersonScore();}}
运行结果: