1,设计一个抽象类,声明有关算术运算的方法,并创建一个子类继承该抽象的类,完成有理数的加、减、乘、除四则运算。
package a;
public class YouLiShu {
int fz,fm;
public YouLiShu(){}
public YouLiShu(int fz, int fm) {
int ys=this.maxYueShu(fz, fm);
this.fz = fz/ys;
this.fm = fm/ys;
}
public YouLiShu jia(YouLiShu a){
int newfz=this.fz*a.fm+this.fm*a.fz;
int newfm=this.fm*a.fm;
return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
}
public YouLiShu jian(YouLiShu a){
int newfz=this.fz*a.fm-this.fm*a.fz;
int newfm=this.fm*a.fm;
return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
}
public YouLiShu cheng(YouLiShu a){
int newfz=this.fz*a.fz;
int newfm=this.fm*a.fm;
return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
}
public YouLiShu chu(YouLiShu a){
int newfz=this.fz*a.fm;
int newfm=this.fm*a.fz;
return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
}
public String toString() {
return(fz+"/"+fm);
}
public double toXiaoShu(){
return (this.fz*(1.0))/this.fm;
}
public int maxYueShu(int a,int b){
if (b==0) return a;
return maxYueShu(b,a%b);
}
}
package a;
public class Testsy1 {
public static void main(String[] args) {
YouLiShu y1=new YouLiShu(2,4);
YouLiShu y2=new YouLiShu(2,5);
System.out.println("2/4+2/5="+y1.jia(y2).toString()+" "+y1.jia(y2).toXiaoShu());
System.out.println("2/4-2/5="+y1.jian(y2).toString()+" "+y1.jian(y2).toXiaoShu());
System.out.println("2/4*2/5="+y1.cheng(y2).toString()+" "+y1.cheng(y2).toXiaoShu());
System.out.println("2/4 / 2/5="+y1.chu(y2).toString()+" "+y1.chu(y2).toXiaoShu());
}
}
2,编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义Gymnastics类和School类,它们都是ComputerAverage的子类,Gymnastics类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分。School中计算平均分的方法是直接是总分除以总科目。
要求:定义ComputerAverage的对象为上转型对象,并调用重写的方法averge。
package b;
public abstract class ComputerAverage {
public abstract double average(double[] s);
}
package shiyan3;
public class Gymnastics extends ComputerAverage{
public double average(double s[]) {
for(int i=0;i<s.length-1;i++)
{
for(int j=i;j<s.length-1;j++)
{
if(s[i]>s[i+1])
{
double t=s[i];
s[i]=s[i+1];
s[i+1]=t;
}
}
}
double a=0.0;
for(int i=1;i<s.length-1;i++)
{
a+=s[i];
}
a=a/(s.length-2);
return a;
}
}
package b;
public class School extends ComputerAverage{
public double average(double s[]) {
double a=0.0;
for(int i=0;i<s.length;i++)
{
a+=s[i];
}
a=a/(s.length);
return a;
}
}
package b;
public class Testsy3 {
public static void main(String[] args) {
double[] c={2.2,3.4,5.6,6.2,1.4};
ComputerAverage a=new Gymnastics();
ComputerAverage b=new School();
System.out.println(a.average(c));
System.out.println(b.average(c));
}
}
3,编写一个类,该类有如下一个方法:
public int f(int a,int b){……//要求该方法将返回a和b的最大公约数},再编写一个该类的子类,要求子类重写方法f(),而且重写的方法将返回两个正整数的最小公倍数。
要求:在重写的方法的方法体中需要调用被隐藏的方法返回a和b的最大公约数m,然后将(a*b/m)返回;在应用的程序的主类中分别使用父类和子类创建对象,并分别调用方法f()计算两个正整数的最大公约数和最小公倍数。
package c;
public class Maxgys {
int a;
int b;
Maxgys(int a,int b){
this.a=a;
this.b=b;
}
int f(){
int m=a;
int n=b;
if(m<n)
{
int t=n;
n=m;
m=t;
}
while(m%n!=0)
{
int t=m%n;
m=n;
n=t;
}
return n;
}
}
package c;
public class Mingbs extends Maxgys{
Mingbs(int a, int b) {
super(a, b);
}
int f()
{
return a*b/super.f();
}
}
package shiyan2;
public class Testsy2 {
public static void main(String[] args) {
Maxgys a=new Maxgys(6,9);
Mingbs b=new Mingbs(9,12);
System.out.println(a.f());
System.out.println(b.f());
}
}