现在的位置: 首页 > 综合 > 正文

随机生成器示例

2013年10月27日 ⁄ 综合 ⁄ 共 1366字 ⁄ 字号 评论关闭

/*
 *该程序演示随机生成任意数量的演员
 */
import java.util.*;
interface Generator<T> { public T next();}
class GuysMovie {  //电影演员
 private static long counter=0;
 private final long id=counter++;
 public String toString(){
  return getClass().getSimpleName()+"  "+id;
 }
}

class GoodGuysMovie extends GuysMovie {} //优秀演员分隔
class Chan extends GoodGuysMovie { }
class GiGi extends  GoodGuysMovie { }

class BadGuysMovie extends GuysMovie { }   //差演员分隔
class EdisonChen extends BadGuysMovie{ }
class GillianYanTungChung extends BadGuysMovie{ }

public class MakeGuysMovie implements Iterable<GuysMovie>,Generator<GuysMovie> {
 private int n;
 public MakeGuysMovie(int n){this.n=n;}
 private Class[] types={Chan.class,GiGi.class,EdisonChen.class,GillianYanTungChung.class};
 private Random rand=new Random(47);
 //实现Generator接口方法,为什么不直接在 MakeGuysMovie使用泛型呢?这是为了保持迭代一致。
 public GuysMovie next(){
  try{
   return (GuysMovie)(types[rand.nextInt(types.length)].newInstance());
  }catch(Exception e){
   throw new RuntimeException(e);
  }
 }
 //实现Iterable接口,方便使用for-each语句
 public Iterator<GuysMovie> iterator(){
  return new Iterator<GuysMovie>(){
   int count=MakeGuysMovie.this.n;
   public boolean hasNext(){ return count>0;}
   public  GuysMovie next(){
    count--;
    return MakeGuysMovie.this.next();
   }
   public void remove(){
    throw new UnsupportedOperationException();
   }
  };
 }
  
 public static void main(String[] args){
  for(GuysMovie guy: new MakeGuysMovie(10))  //随机生成10个演员
   System.out.println(guy);

 }
}

抱歉!评论已关闭.