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);
}
}