请老师帮忙看一下代码,是否有需要改进的地方。

请老师帮忙看一下代码,是否有需要改进的地方。

public class Test3 {

	public static void main(String[] args) {
		// 生成父类对象数组,数组长度为5
		Animal[] animals = new Animal[5];
		// 产生随机数,随机产生三种具体子类的实例
		Animal animal = null;
		for (int i = 0; i < animals.length; i++) {
			int temp = (int) (Math.random() * 3);
			switch (temp) {
			case 0:
				animal = new Cat();
				break;
			case 1:
				animal = new Dog();
				break;
			case 2:
				animal = new Sheep();
				break;
			}
			animals[i] = animal;
		}

		// 循环输出,循环体中每个对象分别调用cry()方法。
		for (int j = 0; j < animals.length; j++) {
			animals[j].cry();
		}
	}

}
public class Animal {
	//属性:kind(种类)
	private String kind;
	
	public Animal() {
		
	}
	//创建带参(king为参数)构造函数
	public Animal(String kind) {
		
	}
	//应用封装实现对私有属性的get/set操作
	public void setKind(String kind) {
		this.kind = kind;
	}
	public String getKind() {
		return kind;
	}
	
	//创建成员方法cry():void
	public void cry(){
	    
	}
}
public class Cat extends Animal {
	//重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”
    @Override
    public void cry(){
        System.out.println("小猫的叫声:喵喵喵~~~");
    }
}
public class Dog extends Animal {
//重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”
	
    @Override
    public void cry(){
        System.out.println("小狗的叫声:汪汪汪~~~");    
    }
}
public class Sheep extends Animal {
//重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”
    
    @Override 
    public void cry(){
        System.out.println("小羊的叫声:咩咩咩~~~");
    }
}

请老师看一下,是否有需要改进的代码?

还有就是,我打断点调试的时候,在随机数生成的那一步,在expression那里监控temp变量以及等号右边的表达式的值,该句代码执行前后,随机数都会产生变化,这是为什么?为什么不是只有执行了这句之后,等号右边的随机值才回产生变化,然后再赋给左边的temp?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

1、同学完成的不错,继续加油

2、没有明白同学说的问题:同学说的是这个吗?同学可以截图举例说明一下么?

http://img1.sycdn.imooc.com//climg/5c09e2a10001533816940609.jpg

祝学习愉快

  • 空指针异常null 提问者 #1
    对,是这个,我把int temp = (int)(Math.random() *3);等号左右两边的变量和表达式加进去,调试时观察执行该句前后的变量值得变化,感觉怪怪的。执行后的Math.random()的值*3,好像和temp的值不一样。
    2018-12-07 11:06:50
  • 老师试了一个,随机数是这样的,如果换成是其他表达式就没问题,比如你把temp的值加1再赋值给temp1,temp1和temp值的变化是同步的,猜测可能和随机数的生成原理有关。 祝学习愉快。
    2018-12-07 15:13:28
  • 嗯嗯,我也试了一下,好像和random()这个方法有关,一直在变化。还有一个问题,前面加了强制转换成int类型的操作,这个过程,是用怎样的原则进行转换?是只取整数部分吗?比如随机数*3后是1.8,那就是取1?还是说按照四舍五入?
    2018-12-07 16:03:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师