1.1 开发一个食物类Food,具体要求如下:
1.2 具有私有属性:营养值,提供公有的get方法和保护的set方法。
1.3 有一个保护的无参的构造方法,在该方法内营养值由1-10之间的随机数产生
1.4 包含一个公有的获取食物名称的方法:public String getName(){…}
1.5 添加主方法测试
public class Food {
private double nutrition;//营养值
private String name;
public double getNutrition() {
return nutrition;
}
public void setNutrition(double nutrition) {
this.nutrition = nutrition;
}
public void setName(String name) {
this.name = name;
}
protected Food() {
this.nutrition = ((Math.random() * 9) + 1);
}
public String getName() {
return name;
}
}
public class FoodText {
public static void main(String[] args) {
Food food=new Food();
double nutrition = food.getNutrition();
System.out.println(nutrition);
food.setName("肉");
String name = food.getName();
System.out.println(name);
2.1 这三个类均显式编写无参的构造方法,并分别对营养值乘1.2 , 0.7 , 0.9 处理;
2.2 这三个类均重写父类的获取食物名称的方法;
2.3 并测试。
public class Meat extends Food {
private String name;
public Meat(){
super.setNutrition(super.getNutrition()*1.2);
}
//重写父类的获取食物的名称方法
@Override
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public class Starch extends Food {//淀粉
private String name;
public Starch(){
super.setNutrition(super.getNutrition()*0.7);
}
//重写父类的获取食物的名称方法
@Override
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public class Fruits extends Food {
private String name;
public Fruits(){
super.setNutrition(super.getNutrition()*0.9);
}
//重写父类的获取食物的名称方法
@Override
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
3.1 具有私有属性:名称,体重(直接赋初值10.0),两者均提供公有的get方法。
3.2 仅有一个公有的有参构造方法:构造参数参数为名称
3.3 具有一个公有的,参数是Food类型,无返回值的eat(Food food)方法,其功能是吃食物(在控制台打印猴子名称和食物名称等信息),同时体重会增加,体重增加量是:营养值*0.1
3.4 具有一个公有的,无参的,无返回值的game()方法,其功能是游戏(可在控制台打印信息),体重降低0.05,若体重在5以下不再下降。
3.5 重写toString方法
3.6 重写equals方法(注意遵守Java关于重写equals方法的有关规定)
3.7 添加主方法测试。
public class Monkey {
private String name;
private double weight = 10.0;
public Monkey(String name){
this.name=name;
}
public void eat(Food food){
System.out.println("食物的名称:"+food.getName());
System.out.println("猴子的名称:"+this.name);
this.weight +=food.getNutrition()*0.1;
System.out.println("猴子的体重:"+this.weight);
}
public void game(){
if(this.weight<5){
System.out.println("太虚弱了,该进食了!!");
return;
}
this.weight -=0.5;
}
public String getName() {
return name;
}
public double getWeight() {
return weight;
}
@Override
public String toString() {
return "Monkey{" +
"name='" + name + '\'' +
", weight=" + weight +
'}';
}
}
public class FoodText {
public static void main(String[] args) {
Food food = new Food();
Monkey monkey=new Monkey("凯撒大帝");
monkey.eat(food);
monkey.game();
}
}
创建20个猴子,每个猴子姓名随机产生,但不允许重名,每个猴子进行100次吃食物和游戏,具体每次吃食物还是游戏是随机的,而且获取食物也是随机的可能是肉制品,水果蔬菜制品和淀粉制品。最后输出20个猴子的名称和体重。注:可以根据需要自由设计该类。
public class MonkeyGama {
public static void main(String[] args) {
//创建20个猴子对象
for (int k=1;k<=20;k++){
Monkey monkey =new Monkey("凯撒"+k);
Food food=null;
for(int j=0;j<100;j++){
int num=(int)(Math.random()*2+1);//1吃东西2玩游戏
if(num==1){
int num1=(int)(Math.random()*3+1);//1吃肉 2淀粉 3水果
if(num1==1){//吃肉
food=new Meat();
food.setName("肉肉肉");
monkey.eat(food);
}else if(num1==2){//淀粉
food=new Starch();
food.setName("淀粉");
monkey.eat(food);
}else {//水果
food=new Fruits();
food.setName("水果");
monkey.eat(food);
}
//吃食物信息打印
System.out.print(monkey.getName()+"吃:"+food.getName()+"体重:");
System.out.printf("%.1f",monkey.getWeight());
System.out.println();
}else {
monkey.game();
//玩游戏信息打印
System.out.print(monkey.getName()+"玩游戏体重:");
System.out.printf("%.1f",monkey.getWeight());
System.out.println();
}
}
}
}
}