锁定老帖子 主题:国王和100个犯人-
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-15
我鸡蛋里挑点骨头吧。。。
PS:我觉得对于这种需求不会变化的题目来说也没必要考虑什么扩展性。。。 1.计数员和普通囚犯 可以都为PRISONER的子类 这样就不必用IF来判断了 2.如果再要往下一步走对于普通囚犯来说分两种状态, 一种是开过灯,一种是没开过灯,用state模式整一下大概又可以少不少判断。 |
|
返回顶楼 | |
发表时间:2010-01-15
hkliya 写道 myreligion 写道 在我看来,程序内出现System.out.println一般都在1年以内,或者只相当于一年以内。呵呵~~
可我这个是控制台程序啊,您的意思是输出写到文件? 用log4j啊。。。用System.out.println有不少缺点呢。比如:影响效率,浪费磁盘空间等。。。 |
|
返回顶楼 | |
发表时间:2010-01-15
lzyzizi 写道 我鸡蛋里挑点骨头吧。。。
PS:我觉得对于这种需求不会变化的题目来说也没必要考虑什么扩展性。。。 1.计数员和普通囚犯 可以都为PRISONER的子类 这样就不必用IF来判断了 2.如果再要往下一步走对于普通囚犯来说分两种状态, 一种是开过灯,一种是没开过灯,用state模式整一下大概又可以少不少判断。 这个不是鸡蛋里挑骨头,说的很多。。技术员和普通囚犯就应该写成2个子类。。。 |
|
返回顶楼 | |
发表时间:2010-01-15
li002qwe 写道 lzyzizi 写道 我鸡蛋里挑点骨头吧。。。
PS:我觉得对于这种需求不会变化的题目来说也没必要考虑什么扩展性。。。 1.计数员和普通囚犯 可以都为PRISONER的子类 这样就不必用IF来判断了 2.如果再要往下一步走对于普通囚犯来说分两种状态, 一种是开过灯,一种是没开过灯,用state模式整一下大概又可以少不少判断。 这个不是鸡蛋里挑骨头,说的很多。。技术员和普通囚犯就应该写成2个子类。。。 class(类) or Type(类型) ? 确实不是鸡蛋里挑骨头,楼主还没脱离一些结构化的思维。 面向对象的思想就是要解决现实事物 |
|
返回顶楼 | |
发表时间:2010-01-15
装 13一大堆
|
|
返回顶楼 | |
发表时间:2010-01-15
国王明显是耍你们的,还写程序 ……
|
|
返回顶楼 | |
发表时间:2010-01-15
night_stalker 写道 国王明显是耍你们的,还写程序 ……
确实比较恼火,如果其中某个犯人挂掉的话,就全都出不来了 用这个算法,每个人被选中的机率是1%,计数员要被选接近100次,也就是大概要10000天左右 大概是27年,对于死囚来说,还是值得一试的 只不过这样的生活环境,估计心里素质不好的,都得抑郁症自杀了 |
|
返回顶楼 | |
发表时间:2010-01-15
课程设计的题目吧。
|
|
返回顶楼 | |
发表时间:2010-01-15
我是学生,我觉得你写的还没我写的好。所以你应该还没上大三,因为我今年大三。
贴上我的代码咱们交流交流。 package test; public abstract class Prisoner { public static boolean light; public static int count; public static int day; static{ //囚犯们唯一共有的通讯工具--灯 light=false; //记录灯被计数员关掉的次数,也是出去过的囚犯数量 count=0; //囚犯们在度过的天数 day=0; } //记录囚犯有没有打开过灯 boolean once; //囚犯出去放风 public abstract void relieve(); } package test; public class Counter extends Prisoner{ //计数员出去放风的时候,如果看见灯亮着,就关灯并计数 public void relieve() { day++; if(light) { count++; light=false; } } } package test; public class Ordinary_Prisoner extends Prisoner{ //普通囚犯,构造时没有开过灯 public Ordinary_Prisoner(){ once=false; } //普通囚犯出去放风,第一次看见灯关着时就把灯打开,以后都不再开关灯 public void relieve() { day++; if(!once&&!light){ light=true; once=true; } } } package test; import java.util.HashMap; import java.util.Random; public class King { //国王拥有一座监狱 private HashMap<Integer,Prisoner> Prison; private Random random=new Random(); public King() { //把100个囚犯放进监狱。其中有一个计数员和99个普通囚犯 Prison=new HashMap<Integer,Prisoner>(); Prisoner counter=new Counter(); Prison.put(Integer.valueOf(0), counter); for(int i=1;i<100;i++) { Prisoner temp=new Ordinary_Prisoner(); Prison.put(Integer.valueOf(i),temp); } } //国王随机挑选一个囚犯 public Prisoner RandPick() { int r=random.nextInt(100); //System.out.println(r); Prisoner prisoner=Prison.get(Integer.valueOf(r)); return prisoner; } public static void main(String[] args) { System.out.println("Run\n"); King king=new King(); //每天,国王随机挑选一个囚犯出去放风 for(;;) { king.RandPick().relieve(); System.out.println(Prisoner.count); //如果99个普通囚犯都出去过了 if(Prisoner.count==99) { king.RandPick().relieve(); System.out.println(Prisoner.day); System.out.println(new Integer(Prisoner.day).doubleValue()/365d); break; } } } } |
|
返回顶楼 | |
发表时间:2010-01-15
我感到深深地自卑了
|
|
返回顶楼 | |