为什么我这样写输出的都是猫的叫声 其他的都不输出呢

来源:3-16 编程练习

muke_xinke

2020-03-19 15:19:43

public class Test {

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

		// 循环输出,循环体中每个对象分别调用cry()方法。
		for(int i=0;i<ani.length;i++) {
			ani[i].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 kind;

}

//创建成员方法cry():void

public void cry() {

}



}

public class cat extends Animal {

    //重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”

     public cat() {

     

     }


     @Override

    public void cry() {

    System.out.println("小猫的叫声:喵喵喵~~~");

    }


}

public class Dog extends Animal {

    //重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”

public Dog() {

}


@Override

public void cry() {

System.out.println("小狗的叫声:汪汪汪~~~");

}


}

public class Sheep extends Animal {

    //重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”

   public Sheep() {

   

   }


   @Override

   public void cry() {

System.out.println("小羊的叫声:咩咩咩~~~");

}



}


写回答

1回答

好帮手慕小琪

2020-03-19

同学你好,下面将解答同学的问题。

1. 同学的代码之所以不输出其他动物叫声,是因为获取随机数时有误,(int)Math.random(),强转成int类型的随机数只为0,根据运算优先级别,同学的代码先执行int随机数强转再进行*3操作,所以n一直为0。更改后代码如下:

 http://img.mukewang.com/climg/5e73245f09676c6906760103.jpg

只需将 Math.random() * 3 外加括号即可,优先计算括号中内容。

2. 类名命名有误,类名首字母应大写,建议以英文名称命名。例如同学的cat类应写为Cat。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

1
huke_xinke
h 非常感谢 明白了
h020-03-19
共1条回复

0 学习 · 11489 问题

查看课程