3-11随机结果有时候不是5个

3-11随机结果有时候不是5个

package com.three.eleven;


public class Animal {

private String kind;//种类

public Animal() {

}

public Animal(String kind) {

this.setKind(kind);

}

public void cry() {

}

//get set方法

public String getKind() {

return kind;

}


public void setKind(String kind) {

this.kind = kind;

}

}




中间Cat Dog Sheep的不复制了





package com.yu.test;


import com.three.eleven.Animal;

import com.three.eleven.Cat;

import com.three.eleven.Dog;

import com.three.eleven.Sheep;


public class Test_3_11 {


public static void main(String[] args) {

Animal[] arr;

arr=new Animal[5];

for(int i=0;i<arr.length;i++) {

if((int) (Math.random()*3)==0) 

arr[i]=new Cat();

if((int) (Math.random()*3)==1) 

arr[i]=new Dog();

if((int) (Math.random()*3)==2) 

arr[i]=new Sheep();

}

for(int i=0;i<arr.length;i++) {

if(arr[i] instanceof Cat) {

Cat temp=(Cat)(arr[i]);

temp.cry();}

if(arr[i] instanceof Dog) {

Dog temp=(Dog)(arr[i]);

temp.cry();}

if(arr[i] instanceof Sheep) {

Sheep temp=(Sheep)(arr[i]);

temp.cry();}

}

}

}

 为啥有时候只出现2个3个动物 不是5个值么,老师帮忙看看哪出错了               

正在回答 回答被采纳积分+1

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

2回答
装_自渡 2017-12-17 16:32:23

题目的要求是数组长度为5哎,应该是a[4],另外产生对象实例中的IF是顺序执行的,并不形成多分枝结构,所以顺序执行一遍,可能条件均为假,造成数组值为空,其实如果你不断运行的话,会出现0个实例和6个实例的极端情况,但就概率而言,出现3个实例的概率最大。

湛蓝牛仔 2017-11-22 22:44:53

你可以先创建一个Animal[] arr=new Animal[5],

然后建立一个for循环给 arr数组赋值 

再判断传进来的随机数给arr[i]赋值,可以参考

for(int i=0;i<arr.length;i++)

int  j=(int) (Math.random()*3);

swith(j){

case 0:

arr[i]=new Cat();break;

case 1:

arr[i]=new Dog();break;

case 2:

arr[i]=new Sheep();break;

default:

return;

}


  • 您仔细检查一下您代码的第二行
    2017-12-04 19:33:42
  • 修改了,多谢指正
    2017-12-04 21:37:31
  • 您的方法应该比提问者的方法要高效一些,但是我也看不出来提问者的代码出现了什么问题。我认为提问者代码在逻辑上面是正确的
    2017-12-05 19:57:10
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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