(1). 2020年东京奥运会共设13种球类运动,包括足球、篮球、排球、乒乓球、羽毛球、网球、橄榄球、水球、棒球、垒球、高尔夫球、曲棍球和手球,这13种球都可以称之为“球”。请通过分析,抽象它们所共有的性质,定义一个抽象类Ball。在报告中附上程序截图、运行结果截图(要求以中国队获得奖牌数量最多的三个球类运动项目为例)和详细的文字说明。
class Ball{//构造父类——球类
String ChineseName;
String name;
int medal;
Ball(){
name="ball";
ChineseName="球";
medal=0;
}
void show(){
System.out.println("项目"+name+ChineseName+"总共获得"+medal+"枚金牌");
}
}
public class first {
public static void main(String args[]){
Ball ball=new Ball();
System.out.println("测试父类:");
ball.show();
System.out.println("2020东京奥运会中国获得金牌数最多的三种球类如下:");
ball=new PingpongBall("乒乓球",5);
ball.show();
ball=new Badminton("羽毛球",1);
ball.show();
ball=new Basketball("篮球",1);
ball.show();
}
}
class Football extends Ball{//构造足球类
Football(String s,int num){
name="football";medal=num;ChineseName=s;
}
}
class Basketball extends Ball{//构造篮球类
Basketball(String s,int num){
name="Basketball";medal=num;ChineseName=s;
}
}
class Volleyball extends Ball{//构造排球类
Volleyball(String s,int num){
name="Volleyball";medal=num;ChineseName=s;
}
}
class PingpongBall extends Ball{//构造乒乓球类
PingpongBall(String s,int num){
name="PingpongBall";medal=num;ChineseName=s;
}
}
class Badminton extends Ball{//构造羽毛球类
Badminton(String s,int num){
name="Badminton";medal=num;ChineseName=s;
}
}
class Tennis extends Ball{//构造网球类
Tennis(String s,int num){
name="Tennis";medal=num;ChineseName=s;
}
}
class Rugby extends Ball{//构造橄榄球类
Rugby(String s,int num){
name="Rugby";medal=num;ChineseName=s;
}
}
class Water_polo extends Ball{//构造水球类
Water_polo(String s,int num){
name="Water_polo";medal=num;ChineseName=s;
}
}
class Baseball extends Ball{//构造棒球类
Baseball(String s,int num){
name="Baseball";medal=num;ChineseName=s;
}
}
class Softball extends Ball{//构造垒球类
Softball(String s,int num){
name="Softball";medal=num;ChineseName=s;
}
}
class golf extends Ball{//构造高尔夫球类
golf(String s,int num){
name="golf";medal=num;ChineseName=s;
}
}
class Hockey extends Ball{//构造曲棍球类
Hockey(String s,int num){
name="Hockey";medal=num;ChineseName=s;
}
}
class Handball extends Ball{//构造手球类
Handball(String s,int num){
name="Handball";medal=num;ChineseName=s;
}
}
(2).编写一个Athlete类。该类包含三个成员变量name、sport和medal,分别代表一个运动员的姓名、最擅长的运动项目名称和在2020年东京奥运会获得的奖牌数量。在该类中重写Object类的toString方法,当调用它重写的toString方法时,输出这个运动员的姓名、运动项目和奖牌数量。在报告中附上程序截图、运行结果截图(要求以2020年东京奥运会中国队第一块金牌获得者为例)和详细的文字说明。
class Athlete{//构造类
String name;
int medal;
String sport;
Athlete(){//无参构造
name=null;
medal=0;
sport=null;
}
Athlete(String name,int medal,String sport){//带参构造
this.name=name;
this.medal=medal;
this.sport=sport;
}
public String toString(){//重写toString方法
String string;
string=(name+"是中国在东京奥运会第一位金牌得者\n"+"获奖项目是"+sport+"\n奖牌数量是"+medal);
return string;
}
}
public class second {
public static void main(String args[]){
Athlete athlete=new Athlete("杨倩",2,"射箭");
System.out.println(athlete);//利用athlete的toString方法作为println的参数
}
}
(3).编写一个队列类Queue,用来存储short型数据,队列中的数据是先进先出的。具体要求如下:成员变量short [] elements用来存储short型数据;成员变量int size用来表示存储的short型数据的个数;构造方法Queue在初始化队列的时候,设置队列的容量为16;方法enqueue(short v)用来往队列中添加一个short型数据;方法dequeue()用从队列中删除并返回一个short型数据;方法getSize()用来返回队列的大小。在报告中附上程序截图、运行结果截图和详细的文字说明。
class Queue{//类Queue的构造
static int maxsize=16;//设置队列最大长度,初始化为16
short []elements;
int size;
Queue(){//无参构造函数的定义;
elements=new short [maxsize];//初始化数组长度为maxsize
size=0;
}
Queue(short []elements,int size){//有参构造
this.size=size;
this.elements=new short[maxsize];
for(int i=0;i<size;i++) this.elements[i]=elements[i];
}
void enqueue(short v){//enqueue成员方法的定义
if(size+1>maxsize){//判断队列是否已满,若已满,扩容并输出相应信息
maxsize*=2;//队列成倍扩容
System.out.println("当前队列已满,扩容队列容量至"+maxsize);
short []array=new short[size];
for(int i=0;i<size;i++) array[i]=elements[i];//数组array记录原数组elements的数据
elements=new short[maxsize];//重新为数组开辟maxsize的空间
for(int i=0;i<size;i++) elements[i]=array[i];
}
System.out.println("元素"+v+"入队啦!");
elements[size]=v;//将v插入elements末端(插入下标为size)
size+=1;//数组长度加一
}
short dequeue(){//删除队列元素的方法的定义
System.out.println("有人出队啦!");
short element=elements[0];//element记录被删数据,并且作为返回值
for(int i=0;i<size-1;i++){
elements[i]=elements[i+1];//数组元素前移
}
size-=1;//队列长度减一
return element;//返回被删数据
}
short getSize(){//放回队列大小的方法的构造
return (short)size;//size记录了当前队列的大小,因为题目要求size为int型,所以来一手类型转换
}
void show(){
System.out.println("当前队列长度为"+size+",队列各元素分别为:");
for(int i=0;i<size;i++) System.out.print(elements[i]+" ");
System.out.println();
}
}
public class third {
static int maxsize=16;
public static void main(String args[]){
short []elements=new short[maxsize];
for(short i=0;i<(short)maxsize;i++) elements[i]=i;//创建一个short数组为queue初始化
Queue queue=new Queue(elements,maxsize);
System.out.println("getSize方法的测试,此时size大小为"+queue.getSize()+"\n随后是初始化后的队列的输出:");
queue.show();
System.out.println("出队的是:"+ queue.dequeue());
queue.show();
queue.enqueue((short)16);
queue.show();
queue.enqueue((short)17);
queue.show();
}
}
(4).编写一个复数类Complex:成员变量包括realPart和imagePart,分别代表实数部分和虚数部分;构造方法Complex()用于将实数部分和虚数部分都置为0;构造方法Complex(int r, int i)用于将实数部分置为r、虚数部分置为i;方法Complex complexADD(Complex c)将当前复数对象与形参复数对象相加;方法Complex complexSUB(Complex c)将当前复数对象与形参复数对象相减;String toString()把当前复数对象的实数部分和虚数部分组合成a+bi的字符串形式。在报告中附上程序截图、运行结果截图(要求输出复数3+5i和复数2+3i相加与相减的结果)和详细的文字说明。
class Complex{
int realPart;
int imagePart;
Complex(){//默认构造使实部虚部都为0
realPart=0;
imagePart=0;
}
Complex(int real,int image){//有参构造
realPart=real;
imagePart=image;
}
Complex complexADD(Complex c){
Complex a=new Complex();
a.realPart=realPart+c.realPart;
a.imagePart=imagePart+c.realPart;
return a;
}
Complex complexSUB(Complex c){
Complex a=new Complex();
a.realPart=realPart-c.realPart;
a.imagePart=imagePart-c.imagePart;
return a;
}
public String toString(){
String string;
if(realPart!=0){
string=realPart+"";
}
else string="";
if(imagePart==0){
if(realPart==0)string="0";
else string+="";
}
else if(imagePart>0) {
if(imagePart!=1)
string+="+"+imagePart+"i";
else {
if(realPart!=0)string+="+i";
else string+="i";
}
}
else if(imagePart<0){
if(imagePart!=-1) string+=imagePart+"i";
else string+="-i";
}
return string;
}
}
public class fourth {
public static void main(String args[]){
Complex a=new Complex(3,5);
System.out.print("复数a:");
System.out.println(a);
Complex b=new Complex(2,3);
System.out.print("复数b:");
System.out.println(b);
Complex c;
c=a.complexADD(b);
System.out.print("复数a+b:");
System.out.println(c);
c=a.complexSUB(b);
System.out.print("复数a-b:");
System.out.println(c);
}
}
(5).编写一个旅行推荐指数类TravelIndex,成员变量和方法自定。编写一个新冠疫情现状类COVID19Status,成员变量和方法自定。自行查阅累计确诊、死亡和现有确诊等数据,计算中国、日本、新加坡、美国、英国、俄罗斯的旅行推荐指数(需要说明计算的合理性)。在报告中附上程序截图、运行结果截图(要求按旅行推荐指数大小输出以上六个国家的名称和相应的数值)和详细的文字说明。
import java.lang.module.Configuration;
class COVID19Status{
private String name;
private long Confirmed;//确诊人数
private long population;//总人数
private long died;//累计死亡数
private long Current_diagnosis;//现有确诊数
COVID19Status(){}
COVID19Status(String name,long Confirmed,long population,long died,long Current_diagnosis){
this.name=name;
this.Confirmed=Confirmed;
this.Current_diagnosis=Current_diagnosis;
this.died=died;
this.population=population;
}
public String getName(){return name;}
public long getConfirmed(){return Confirmed;}
public long getPopulation(){return population;}
public long getDied(){return died;}
public long getCurrent_diagnosis(){return Current_diagnosis;}
}
class TravelIndex{
COVID19Status covid19status;
double index;
TravelIndex(){
index=0;
covid19status=null;
}
TravelIndex(COVID19Status covid19Status){this.covid19status=covid19Status;
double RateOfCurrent_diagnosis= covid19status.getCurrent_diagnosis()*1e8/covid19status.getPopulation();//累计确诊率
double RateOfDied=covid19status.getDied()*1e8/covid19status.getConfirmed();//累计死亡率
double RateOfConfirmed=covid19status.getCurrent_diagnosis()*1e8/covid19status.getPopulation();//现有确诊率
index=(RateOfConfirmed*0.2+RateOfDied*0.5+RateOfCurrent_diagnosis*0.3);
}
}
public class fifth {
public static void main(String args[]){
TravelIndex []country=new TravelIndex[6];
country[0]=new TravelIndex(new COVID19Status("中国",7729043,1395000000,27172,7354281));
country[1]=new TravelIndex(new COVID19Status("日本",21692795,127000000,45756,1204531));
country[2]=new TravelIndex(new COVID19Status("美国",98779943,327000000,1089916,1692428));
country[3]=new TravelIndex(new COVID19Status("俄罗斯",21278816,244000000,388709,330833));
country[4]=new TravelIndex(new COVID19Status("英国",23798793,66489000,191681,199353));
country[5]=new TravelIndex(new COVID19Status("新加坡",1040000,5638700,1214,20939));
for(int i=0;i<6;i++){
double min=country[i].index;
for(int j=i;j<6;j++)
if(min>country[j].index){
double t=min;
min=country[j].index;
country[j].index=t;
}
}
System.out.println("====旅游推荐指数====");
for(int i=0;i<6;i++)
System.out.println("NO"+i+"\t"+country[i].covid19status.getName()+"\t"+country[i].index);
}
}