Java 作业四

4-1动物体系

基于继承关系编写一个动物体系,具体的动物包含小狗和小猫。每只动物都有名字和颜色,都能够做自我介绍(introduce)。此外,小狗有智商属性(整数),能接飞盘(catchFrisbee(),方法体内输出一行“catch frisbee”即可),小猫有眼睛颜色属性,能抓老鼠(catchMouse(),方法体内输出一行“catch mouse”即可)。各种小动物自我介绍时均介绍自己的姓名和颜色,此外,小狗应介绍自己的智商,小猫应介绍自己的眼睛颜色。小狗介绍时输出”My name is xxx, my color is xxx, my IQ is xxx”, 小猫介绍时输出“My name is xxx, my color is xxx, my eyecolor is xxx”
构造类TestAnimal,提供静态函数introduce(Animal),对参数动物自我介绍。提供静态函数action(Animal),根据参数对象的实际类型进行活动,如果是小狗,则让其接飞盘,如果是小猫,则让其抓老鼠。
Main函数中,根据动物类型构造动物,并调用TestAnimal中的方法进行自我介绍(introduce)和活动(action)

输入描述:

动物类型 动物名称 动物颜色 动物其他属性 如
1 猫名称 猫颜色 猫眼睛颜色
2 狗名称 狗颜色 狗的智商

输出描述:

自我介绍
活动

裁判测试程序样例:

import java.util.Scanner;

/*你的代码被嵌在这里 */

public class Main{
    
    public static void main(String args[]) {
        
        Scanner s = new Scanner (System.in);
        int i = s.nextInt();
        Animal a = null;
        if (i==1) {
            a = new Cat(s.next(), s.next(), s.next());
        } else if (i==2) {
            a = new Dog(s.next(), s.next(), s.nextInt());
        }
        TestAnimal.introduce(a);
        TestAnimal.action(a);
        
    }
}

输入样例:

在这里给出一组输入。例如:

1 Mikey white blue

输出样例:

在这里给出相应的输出。例如:

My name is Mikey, my color is white, my eyecolor is blue
catch mouse

答案:

abstract class Animal{
    String name;
    String color;
    public Animal(String name,String color){
        this.name=name;
        this.color=color;
    }
    abstract public void introduce();
    abstract public void action();
}
class Dog extends Animal{
    int iq;
    public Dog(String name,String color,int iq){
        super(name,color);
        this.iq=iq;
    }
    public void introduce(){
        System.out.println("My name is " + name + ", my color is " + color + ", my IQ is " +iq);
    }
    public void action(){
        System.out.println("catch frisbee");
    }
}
class Cat extends Animal{
    String eyecolor;
    public Cat(String name,String color,String eyecolor){
        super(name,color);
        this.eyecolor=eyecolor;
    }
    public void introduce(){
        System.out.println("My name is " + name + ", my color is " + color + ", my eyecolor is " + eyecolor);
    }
    public void action(){
        System.out.println("catch mouse");
    }
}

class TestAnimal{
    public  static void introduce(Animal animal){
    	animal.introduce();
    }
    public static void action(Animal animal){
    	animal.action();
    }
}

4-2 学生、大学生、研究生类

定义Student学生类,拥有学号、姓名、性别属性,提供构造函数,以及相应属性的get set函数,提供函数attendClass(String className)表示上课。
定义CollegeStudent大学生类继承自Student类,拥有新增属性专业,提供构造函数,提供新增属性的get和set函数
定义GraduateStudent研究生类继承自CollegeStudent类,拥有新增属性导师,提供构造函数,提供新增属性的get和set函数,提供函数doResearch() 表示做研究(打印xx is doing research)。

main函数中对构造的类进行测试

输入描述:

学生类信息,学号、姓名、性别
大学生类信息,学号、姓名、性别、专业
研究生类信息,学号、姓名、性别、专业、导师

输出描述:

学生类信息
大学生类信息
研究生类信息

裁判测试程序样例:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         int no = scan.nextInt();
         String name = scan.next();      
         String sex = scan.next();      
         Student s = new Student(no, name, sex);
         s.print();

         no = scan.nextInt();
         name = scan.next();      
         sex = scan.next();      
         String major = scan.next();
         CollegeStudent c = new CollegeStudent(no, name, sex, major);
         c.print();

         no = scan.nextInt();
         name = scan.next();      
         sex = scan.next();      
         major = scan.next();
         String supervisor = scan.next();
         GraduateStudent g = new GraduateStudent(no, name, sex, major, supervisor );
         g.print();
         g.doResearch();
         scan.close(); 
    }
}

/* 你的代码被嵌在这里*/

输入样例:

在这里给出一组输入。例如:

1 liu female
2 chen female cs
3 li male sc wang

输出样例:

在这里给出相应的输出。例如:

no: 1
name: liu
sex: female
no: 2
name: chen
sex: female
major: cs
no: 3
name: li
sex: male
major: sc
supervisor: wang
li is doing research

答案:

class Student
{
    private int no;
    private String name;
    private String sex;
    public Student(int no,String name,String sex)
    {
        this.no=no;
        this.name=name;
        this.sex=sex;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String attendClass (String className)
    {
        return className;
    }
    public void print()
    {
        System.out.println("no: "+getNo());
        System.out.println("name: "+getName());
        System.out.println("sex: "+getSex());
    }
}
class CollegeStudent extends Student
{
    private String major;
    public CollegeStudent(int no,String name,String sex,String major )
    {
        super(no,name,sex);//继承父类变量
        this.major=major;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }
    public void print()
    {
        super.print();
        System.out.println("major: "+getMajor());
    }
}
class GraduateStudent extends CollegeStudent{
    private String supervisor;
    public GraduateStudent(int no,String name,String sex,String major,String supervisor)
    {
        super(no,name,sex,major);
        this.supervisor=supervisor;
    }
    public String getSupervisor() {
        return supervisor;
    }
    public void setSupervisor(String supervisor) {
        this.supervisor = supervisor;
    }
    public void doResearch()
    {
        System.out.println(getName()+" is doing research");
    }
    public void print()
    {
        super.print();
        System.out.println("supervisor: "+getSupervisor());
    }
}

4-3Battery Charge

电动汽车的电池必须周期性地进行充电,每次充电若干小时,充电过程不能被中断。充电费用基于充电的起止时间决定,费用表列出了一天内各个小时(0-23)的充电费率。每天使用的充电费率表相同,每小时费率是正整数。一个充电费率表示例如下图所示

类BatteryCharger使用费率表来决定最经济的充电方式。该类包含如下两个公有方法:

int getChargeCost(int startHour, int chargeTime) 该方法返回从开始时间经过一定的充电时长的全部充电费用。

int getChargeStartTime(int chargeTime),该函数返回给定充电时长后能使充电费用最小的起始时间。如果存在多个可能的起始时间能产生最少的费用,返回较早(较小)的一个时间。

请写出BatteryCharge类。

在main函数中首先读入24个整数代表每个小时的费用,而后调用getChargeCost,读入两个参数startHour和chargeTime,输出总的费用;而后调用getChargeStartTime,读入充电时间chargeTime,输出费用最少的起始时间。

输入格式:

每小时费用
开始时间和充电时间
充电时间

输出格式:

总的费用
最小费用的起始时间

输入样例:

在这里给出一组输入。例如:

50 60 160 60 80 100 100 120 150 150 150 200 40 240 220 220 200 200 180 180 140 100 80 60
0 2
7

输出样例:

在这里给出相应的输出。例如:

110
22

 答案:

import java.util.Scanner;
import java.util.Arrays;
public class Main{
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int[] a=new int[24];
		for(int i=0;i<24;i++) {
			a[i]=in.nextInt();
		}
		
		
		int start=in.nextInt();
		int time=in.nextInt();
		BatteryCharger x=new BatteryCharger(a);
		int fee=x.getChargeCost(start, time);
		System.out.println(fee);
		
		
		int time2=in.nextInt();
		int second=x.getChargeStartTime(time2);
		System.out.print(second);
	}
}
class BatteryCharger{
	int[] cost;
	int start;
	int time;
	BatteryCharger(int[] a){
		this.cost=a;
		
	}
	int getChargeCost(int start, int time) {
		int fee=0;
		
		int day=0;
		for(int i=0;i<24;i++)
			day+=cost[i];
		
		//System.out.println(day);
		int n=time/24;
		
		int mid=start+(time%24);
		for(int i=start;i<mid;i++) {
			if(i<=23)
			fee+=cost[i];
			else if(i>23)
				fee+=cost[i%23-1];
		}
		return fee+n*day;
		
	}

	int getChargeStartTime(int time) {
		int[] another=new int[24];
		for(int i=0;i<24;i++) {
			another[i]=getChargeCost(i,time);
		}
		
//		for(int i=0;i<24;i++) {
//			System.out.print(another[i]+" ");
//		}
//		System.out.println();
		int min=0;
		for(int i=0;i<24;i++) {
			if(another[min]>another[i])min=i;
		}
		return min;
	}
}

4-4N个数的排序与查

从键盘输入N个整数,并输出指定的某个整数在这N个整数中的按照由小到大的顺序排列的位次(最小的位次是1,最大的位次是N,指定的整数如果不在这N个数中,则其位次是-1)

输入格式:

整数个数,指定的整数值

输出格式:

指定的整数的位次

输入样例:

在这里给出一组输入。例如:

3
12 4 7
4

输出样例:

在这里给出相应的输出。例如:

1

答案:

import java.util.Scanner;
import java.util.Arrays;
public class Main{
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++) {
			a[i]=in.nextInt();
		}
		Arrays.sort(a);
		int flag=-1;
		int x=in.nextInt();
		for(int i=0;i<n;i++) {
			if(a[i]==x) {
				flag=i+1;
				break;
			}
		}
		System.out.println(flag);
	}
}

4-5整数数组比较

给定两个整型数组A和B,将A的元素复制到B中,使得两个数组完全相同。再将B数组从小到大排列,将两数组的同一位置上对应的元素进行比较,统计出A中大于B的元素个数,等于B中元素的个数,小于B中的元素的个数。
提示:可用Arrays.sort排序

输入格式:

数组A的个数
数组A元素

输出格式:

A大于B的个数
A等于B的个数
A小于B的个数

输入样例:

在这里给出一组输入。例如:

10
23 1 32 87 65 12 21 9 76 45

输出样例:

在这里给出相应的输出。例如:

4
1
5

答案:

import java.util.Scanner;
import java.util.Arrays;
public class Main{
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++) {
			a[i]=in.nextInt();
		}
		
		
		int[] b=new int[n];
		for(int i=0;i<n;i++)
			b[i]=a[i];
		
		
		Arrays.sort(b);
		
		int x=0;
		int y=0;
		int z=0;
		for(int i=0;i<n;i++) {
			if(a[i]>b[i])
				x++;
			else if(a[i]==b[i])
				y++;
			else if(a[i]<b[i])
				z++;
		}
		
		System.out.println(x+"\n"+y+"\n"+z);
		
		
		
	}
}


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值