锁定老帖子 主题:国王和100个犯人-
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-15
楼上的大大大三就能写出这样的程序,顶
假设有Prisoner[] prison = new Prisoner[100]; prisone[0] = new Counter(); 则在prison中记录了索引0到一个Counter实例的映射关系 而假设有Map<Integer, Prisoner> prison = new HashMap<Integer, Prisoner>(); prison.put(0, new Counter()); 则同样在prison中记录了键0到一个Counter实例的映射关系 从整数到某种类型的映射关系的集合,如果键的范围是密集的,则采用数组显然更为合适;Java数组也是对象,并不违反“面向对象”的思想。 new Integer()与Integer.valueOf(),用后者更好。而且从Java 5开始基本类型可以自动装箱为包装类型,int到Integer的自动装箱调用的是Integer.valueOf(),不必显式调用该方法。 楼主大大的state == true可以直接写为state。 |
|
返回顶楼 | |
发表时间:2010-01-15
最后修改:2010-01-15
light=false; // 等号两边加空格哦
private HashMap<Integer,Prisoner> Prison; //变量名首字母小写哦
if(!once&&!light){ // 两个否定很晕哦
for(int i=1;i<100;i++) //100这个Magic Number是什么意思哦
|
|
返回顶楼 | |
发表时间:2010-01-15
bugmenot 写道 楼上的大大大三就能写出这样的程序,顶
假设有Prisoner[] prison = new Prisoner[100]; prisone[0] = new Counter(); 则在prison中记录了索引0到一个Counter实例的映射关系 而假设有Map<Integer, Prisoner> prison = new HashMap<Integer, Prisoner>(); prison.put(0, new Counter()); 则同样在prison中记录了键0到一个Counter实例的映射关系 从整数到某种类型的映射关系的集合,如果键的范围是密集的,则采用数组显然更为合适;Java数组也是对象,并不违反“面向对象”的思想。 new Integer()与Integer.valueOf(),用后者更好。而且从Java 5开始基本类型可以自动装箱为包装类型,int到Integer的自动装箱调用的是Integer.valueOf(),不必显式调用该方法。 楼主大大的state == true可以直接写为state。 谢谢你看的这么细心 ![]() 从你的分析看出你功力深厚啊 |
|
返回顶楼 | |
发表时间:2010-01-15
没仔细看,只觉你好无聊,如果工作超过一年肯定不会花时间去写那么啰里啰嗦的一堆话的。
|
|
返回顶楼 | |
发表时间:2010-01-15
langyu 写道 没仔细看,只觉你好无聊,如果工作超过一年肯定不会花时间去写那么啰里啰嗦的一堆话的。
我就是很无聊啊,不无聊上JE做什么,你不也在无聊么,看到无聊的帖子也要回 ![]() |
|
返回顶楼 | |
发表时间:2010-01-15
先支持一下楼主,至少楼主能在编码中找到快乐。 顺便感叹一下,这年头直接使用JDK的提供的方法怎么就忒受人歧视,有必要言必称希腊吗。
建议以后放屁还是先脱裤子,再用食品袋罩住屁股。这样才是放屁经验超过1年的高手。因为: 1 比较环保,不会污染空气。 2 不会污染裤子,也就减少洗衣服的次数,也就等于为减少C排放做贡献 3 拉动了塑料袋的消费,为GDP增长做贡献 如此多的好处啊。 |
|
返回顶楼 | |
发表时间:2010-01-15
很简单的 被你写成这么复杂。。。
|
|
返回顶楼 | |
发表时间:2010-01-15
小问一句,大三那位
能否将for(;;)改为while(true)呢? |
|
返回顶楼 | |
发表时间:2010-01-15
hkliya 写道 myreligion 写道 在我看来,程序内出现System.out.println一般都在1年以内,或者只相当于一年以内。呵呵~~
可我这个是控制台程序啊,您的意思是输出写到文件? 是不是用sysout有问题啊?不明白,,如果这样用不行,请指点一下。。。 因为我经常这样用呵,也好改正改正。。。 |
|
返回顶楼 | |
发表时间: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; } } } } 写的非常好,易于理解,面向对象~~ |
|
返回顶楼 | |