3-16的编程练习
代码只能写到这里了,不知道哪里错误:
先把任务要求贴出来:
任务分析:
1. 定义一个父类Animal类
属性:kind(种类)
方法:创建带参(kind为参数)构造方法
创建cry():void方法
2. 编写三个具体的子类Cat类、Dog类、Sheep类
分别重写父类中的 cry() 方法,输出信息分别为
Cat类:小猫的叫声:喵喵喵~~~
Dog类:小狗的叫声:汪汪汪~~~
Sheep类:小羊的叫声:咩咩咩~~~
3. 编写测试类,首先生成长度为5的父类对象数组,然后通过循环依次向数组中存入数据,现设定存储规则为:
a) 每次随机产生一个0~2的正整数
b) 若数值为 0,则生成一个 Cat 类的对象,存入数组
c) 若数值为 1,则生成一个 Dog 类的对象,存入数组
d) 若数值为 2,则生成一个 Sheep 类的对象,存入数组
最后循环输出数组成员,并分别调用 cry() 方法。
测试类
import java.util.Random;
public class Test {
public static void main(String[] args) {
//生成父类对象数组,数组长度为5
Animal[] animal=new Animal[5];
//产生随机数,随机产生三种具体子类的实例
for(;;){
Random random=new Random(3);
if(random==0)
animal[0]=new Cat();
if(random==1)
animal[1]=new Dog();
if(random==2)
animal[2]=new Sheep();
if(animal[0]!=null &animal[1]!=null &animal[2]!=null)
break;
}
//循环输出,循环体中每个对象分别调用cry()方法。
}
动物类
public class Animal {
//属性:kind(种类)
private String kind;
public Animal(){
}
//创建带参(king为参数)构造函数
public Animal(String kind){
this.setKind(kind);
}
//应用封装实现对私有属性的get/set操作
public void setKind(String kind){
this.kind=kind;
}
public String getKind(){
return this.kind;
}
//创建成员方法cry():void
public void cry(){
}
}
猫类
public class Cat extends Animal {
//重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”
public void cry(){
System.out.println("小猫的叫声:喵喵喵");
}
}
狗类
public class Dog extends Animal {
//重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”
public void cry(){
System.out.println("小狗的叫声:汪汪汪————");
}
}
羊类
public class Sheep extends Animal {
//重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”
public void cry(){
System.out.println("小羊的叫声:咩咩咩————");
}
}
正在回答
同学你好,1、关于int a=(int)((Math.random()*3)+1);语句中,Math类调用random方法时,老师是在写完实例化Random类,调用Random类中的nextInt()方法的情况下,忘记删除了,直接写了int a=(int)((Math.random()*3)+1);,给同学造成的误解非常抱歉!
2、关于Math和Random的导包问题,有如下解释:Math不需要导包是因为Math类属于lang包下的类,Java中的所有程序都默认导入lang包,不用写导入lang包,而Random类属于util包,没有默认导入,所以需要导入util包才能使用哦!
3、Math.random()中的random方法是Math中的静态方法,可以直接调用,与Random类没有关系哦!
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,1、声明定义数组长度为5是题目要求的,例如:
2、生成一个0~2的随机正整数,Math.random是生成大于等于0.0且小于1.0的随机数,将这个随机数乘以3,强转为int后会得到一个0~2的随机数,例如:
生成一个0.2 0.2*3=0.6 强转为int后,保留整数部分就是0
生成一个0.5或者0.6 0.5*3=1.5或者0.6*3=1.8 强转后保留整数部分就是1
生成一个0.7 0.7*3=2.1 强转后 就是2
所以 int num=(int)(Math.random*3)就是生成一个0到2的随机正整数。
3、题目本身就是要求生成随机数,所以那怕生成了5个0只要是随机生成的也是符合题目要求的
4、示例中是将for循环的遍历设置成数组的长度,是符合题目要求的,没有问题的
5、在switch结构中也是可以用break;来跳出循环的!break是java中的关键字跳出循环结束循环,可以用在for中也可以用在switch中。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,前两个小问,书写没有问题,测试类的思路可以参考如下:
Animal[] animal=new Animal[5]; for(int i=0;i<animal.length;i++){ //产生随机数,随机产生三种具体子类的实例 int num=(int)(Math.random()*3); //循环输出,循环体中每个对象分别调用cry()方法 switch(num){ //判断对应的数字 case 0: animal[i]=new Cat(); animal[i].cry(); break; case 1: animal[i]=new Dog(); animal[i].cry(); break; case 2: animal[i]=new Sheep(); animal[i].cry(); break; } }
每创建一次调用对应的cry方法,然后跳出当前循环!
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星