- 浏览: 85699 次
- 性别:
- 来自: 北京
最新评论
-
hkliya:
itway 写道非常感谢,谢谢不客气,有用就好。另外,博客已转 ...
adsl拨号命令 -
itway:
非常感谢,谢谢
adsl拨号命令 -
just_zx:
Linux下最好的开源查字字典:Openyoudao Ope ...
使用linux下的词典StarDic -
wangheid:
Mybeautiful 写道下半年将5公里控制在20分钟内。
...
程序员要锻炼好身体 -
Mybeautiful:
下半年将5公里控制在20分钟内。已经相当快了啊,速度是 6.6 ...
程序员要锻炼好身体
ddddddd
System.out.println 是没有经验的表现? 诚惶诚恐!
豆大的事情都用 log4j 才是学了点花拳绣腿就来卖弄的表现 ……
这个贴 确实 学院味太浓.... 数据抽象出来那么复杂么 好几个类 还有继承 虚函数 ,有的还搞个字典....
这么抽象是不是简单点 int[100] 一百个囚犯 ,0为计数人 , int[x] == 1 代表关过灯 x也就是出来过。 int[0] == 99的时候就完成了. Random 出来一个0-99的整数 直接是就是索引啊。
一个函数搞定就行了,工作不是搞研究 需要扩展重构去 ,不要一次想那么久远 永远不知道未来需求是什么 ,迭代重构.....
System.out.println 是没有经验的表现? 诚惶诚恐!
豆大的事情都用 log4j 才是学了点花拳绣腿就来卖弄的表现 ……
System.out.println 是没有经验的表现? 诚惶诚恐!
我能肯定的是LZ 写过的JAVA代码(纯java代码)没有超过2W行.
是啊,你不回帖的话还少一个
如果灯本来就开着的,计数员关99次灯够吗?
为了简单,我是假设灯初始是关着的
这个原帖有讨论
哦。最好在发帖的时候写上这个假设,可以省大家点时间,因为原帖也没说这个条件,可能后来讨论有说(不过数十页的讨论...)。
如果灯本来就开着的,计数员关99次灯够吗?
为了简单,我是假设灯初始是关着的
这个原帖有讨论
要是我就不回这么无聊的帖子,没有必要
如果灯本来就开着的,计数员关99次灯够吗?
*********************************************************************
不 要 过 度 设 计!
*********************************************************************
太严肃了
C++没什么不好的啊,C++也是OO的。Java不也是从c++发展过来的吗?刚学Java,觉得Java规范太多,C++灵活些。我觉得我写的很像Java。等号两边加不加空格,if语句怎么写这完全是个人习惯,无关大局,有必要争论吗?
即使是c或者c++也不推荐用magic number。特别是你一会儿是100,一会儿是99,而且注释里也有这些数字,以后你未必记得到底99是100-1得来的,还是一个不相关的magic number。
- Prison.rar (10.8 KB)
- 下载次数: 45
- Prison1.1.rar (326.4 KB)
- 下载次数: 79
评论
97 楼
zcy860511
2010-02-04
打酱油路过,看看
96 楼
fengshihao
2010-01-28
night_stalker 写道
hanjiangit 写道
myreligion 写道
在我看来,程序内出现System.out.println一般都在1年以内,或者只相当于一年以内。呵呵~~
System.out.println 是没有经验的表现? 诚惶诚恐!
豆大的事情都用 log4j 才是学了点花拳绣腿就来卖弄的表现 ……
这个贴 确实 学院味太浓.... 数据抽象出来那么复杂么 好几个类 还有继承 虚函数 ,有的还搞个字典....
这么抽象是不是简单点 int[100] 一百个囚犯 ,0为计数人 , int[x] == 1 代表关过灯 x也就是出来过。 int[0] == 99的时候就完成了. Random 出来一个0-99的整数 直接是就是索引啊。
一个函数搞定就行了,工作不是搞研究 需要扩展重构去 ,不要一次想那么久远 永远不知道未来需求是什么 ,迭代重构.....
95 楼
clyman
2010-01-26
精通各种4j,哈哈....
94 楼
night_stalker
2010-01-21
hanjiangit 写道
myreligion 写道
在我看来,程序内出现System.out.println一般都在1年以内,或者只相当于一年以内。呵呵~~
System.out.println 是没有经验的表现? 诚惶诚恐!
豆大的事情都用 log4j 才是学了点花拳绣腿就来卖弄的表现 ……
93 楼
yanghao0
2010-01-21
--
解题思路:
选一个人当证明人,他只负责关灯
其他99个人,只能开灯,并只能开一次。
当证明人记录自己关了99次后,就可确认每个人都出了院子。
--
开始 2010-01-21 17:52:51
运行1次,囚犯共100人
最小的是:9111天
最大的是:9111天
结束 2010-01-21 17:53:44
--
代码附件
解题思路:
选一个人当证明人,他只负责关灯
其他99个人,只能开灯,并只能开一次。
当证明人记录自己关了99次后,就可确认每个人都出了院子。
--
开始 2010-01-21 17:52:51
运行1次,囚犯共100人
最小的是:9111天
最大的是:9111天
结束 2010-01-21 17:53:44
--
代码附件
92 楼
soni
2010-01-18
抱歉,不懂java,代码没看。
但我个人认为,发这种帖子的人基本上做开发不会超过一年。
但我个人认为,发这种帖子的人基本上做开发不会超过一年。
91 楼
hkliya
2010-01-18
其实这只是一个试验,我是搞网络营销的,在标题里写“你能看出我工作几年吗?”就是为了让大家回复这个帖子而已。
90 楼
hanjiangit
2010-01-18
myreligion 写道
在我看来,程序内出现System.out.println一般都在1年以内,或者只相当于一年以内。呵呵~~
System.out.println 是没有经验的表现? 诚惶诚恐!
89 楼
mxswl
2010-01-18
faye.feelcool 写道
从程序本身只能看到你的编程经验,是看不出工作年限的,当然你可以通过规范来显示,但是这个是要看习惯,而不是一段
show的代码。
但从楼主的口气我可以做如下猜测:
如果楼主没有毕业,而且是计算机系的,只有两个结果 1、大二 2、大四
如果楼主已经参与工作,而且是到一个算是正规的软件企业的话,那么楼主工作了2年以上3年以下。
第一年:被大牛所折服,不敢造次,知道山外有山。
第二年:潜心修练
第三年:会做些比较关键的代码,大牛比较信任,会将代码交给你写,开始有点飘。
如果大于三年,又是一个境界。
5年另外一个境界
8年则是一个峰会的情景,我想楼主不会,起码还有执着。
如果是一个作坊的话,或者去一个从别的行业进军软件的话,或者是一个非IT公司的话,那楼主工作年限在1年以下。
show的代码。
但从楼主的口气我可以做如下猜测:
如果楼主没有毕业,而且是计算机系的,只有两个结果 1、大二 2、大四
如果楼主已经参与工作,而且是到一个算是正规的软件企业的话,那么楼主工作了2年以上3年以下。
第一年:被大牛所折服,不敢造次,知道山外有山。
第二年:潜心修练
第三年:会做些比较关键的代码,大牛比较信任,会将代码交给你写,开始有点飘。
如果大于三年,又是一个境界。
5年另外一个境界
8年则是一个峰会的情景,我想楼主不会,起码还有执着。
如果是一个作坊的话,或者去一个从别的行业进军软件的话,或者是一个非IT公司的话,那楼主工作年限在1年以下。
我能肯定的是LZ 写过的JAVA代码(纯java代码)没有超过2W行.
88 楼
tracyhuyan
2010-01-18
群魔乱舞....
87 楼
faye.feelcool
2010-01-17
从程序本身只能看到你的编程经验,是看不出工作年限的,当然你可以通过规范来显示,但是这个是要看习惯,而不是一段
show的代码。
但从楼主的口气我可以做如下猜测:
如果楼主没有毕业,而且是计算机系的,只有两个结果 1、大二 2、大四
如果楼主已经参与工作,而且是到一个算是正规的软件企业的话,那么楼主工作了2年以上3年以下。
第一年:被大牛所折服,不敢造次,知道山外有山。
第二年:潜心修练
第三年:会做些比较关键的代码,大牛比较信任,会将代码交给你写,开始有点飘。
如果大于三年,又是一个境界。
5年另外一个境界
8年则是一个峰会的情景,我想楼主不会,起码还有执着。
如果是一个作坊的话,或者去一个从别的行业进军软件的话,或者是一个非IT公司的话,那楼主工作年限在1年以下。
show的代码。
但从楼主的口气我可以做如下猜测:
如果楼主没有毕业,而且是计算机系的,只有两个结果 1、大二 2、大四
如果楼主已经参与工作,而且是到一个算是正规的软件企业的话,那么楼主工作了2年以上3年以下。
第一年:被大牛所折服,不敢造次,知道山外有山。
第二年:潜心修练
第三年:会做些比较关键的代码,大牛比较信任,会将代码交给你写,开始有点飘。
如果大于三年,又是一个境界。
5年另外一个境界
8年则是一个峰会的情景,我想楼主不会,起码还有执着。
如果是一个作坊的话,或者去一个从别的行业进军软件的话,或者是一个非IT公司的话,那楼主工作年限在1年以下。
86 楼
hkliya
2010-01-17
coreymylife 写道
说句实在话,这个帖子是13最多的帖子!
是啊,你不回帖的话还少一个
85 楼
coreymylife
2010-01-17
说句实在话,这个帖子是13最多的帖子!
84 楼
wannago
2010-01-17
hkliya 写道
wannago 写道
hkliya 写道
题目要求请看原帖http://www.iteye.com/topic/569275
此题的解题思路是:从100个犯人中指定一个作为计数员。当每天随机挑一个犯人放风时,如果是普通犯人,如果他是第一次放风并且灯是关着的,就把灯打开,如果是计数员,他看见灯开着,他就给关掉,并记录总共关了多少次灯,当关到99次时,说明所有人都放过风了。
下面是我自己感觉写的还行的代码,请大牛们帮我挑挑毛病
我的意思是这几个类的设计是否合理,哪个对象里应该持有哪个对象的引用这些方面
或者从扩展性,维护性来说有哪些不足,谢谢大家
===================================
已更新第二版代码,加入log4j和继承
此题的解题思路是:从100个犯人中指定一个作为计数员。当每天随机挑一个犯人放风时,如果是普通犯人,如果他是第一次放风并且灯是关着的,就把灯打开,如果是计数员,他看见灯开着,他就给关掉,并记录总共关了多少次灯,当关到99次时,说明所有人都放过风了。
下面是我自己感觉写的还行的代码,请大牛们帮我挑挑毛病
我的意思是这几个类的设计是否合理,哪个对象里应该持有哪个对象的引用这些方面
或者从扩展性,维护性来说有哪些不足,谢谢大家
===================================
已更新第二版代码,加入log4j和继承
package com.javaeye.hkliya.prisongame; import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; /** * 变态的国王 * * @author Administrator * */ public class King { // 参与此变态游戏的犯人数 public static final int COUNT_OF_PRISONERS = 100; // 游戏是否进行中 private AtomicBoolean gameRunning = new AtomicBoolean(); // 游戏进行的天数 private int countOfDays; // 所有犯人 private Prisoner[] prisoners = new Prisoner[COUNT_OF_PRISONERS]; // 放过风的犯人 private Set<Prisoner> outedPrisonersSet = new HashSet<Prisoner>(); /** * 是否所有犯人都已放过风? * * @return */ private boolean isAllOuted() { return outedPrisonersSet.size() == COUNT_OF_PRISONERS; } /** * 某个犯人报告国王他完成了任务 * * @param prisoner * 来报告的犯人 */ public void accomplishTask(Prisoner prisoner) { gameRunning.set(false); System.out.println("犯:我亲爱的国王陛下,您的犯人编号" + prisoner.getUuid() + "可以肯定的告诉您,我的兄弟们全都到院子放过风了!"); System.out.println("王:Oh, 真的吗?等我看一下记录先。。。"); System.out.println("国王查看记录中。。。"); System.out.println("5秒钟后。。。"); if (isAllOuted()) { System.out.println("王:哇靠!真的呢!你不会是蒙的吧?"); System.out.println("犯:My dear king! 吾已是戴罪之身,又岂敢再欺君犯上?且听我慢慢道来。。。"); System.out.println("省略500字。。。"); System.out .println("王:人才!你TM真是个人才!虽然用了" + countOfDays + "天,不过还是达到要求了!I服了You!\n " + "(国王转头对旁边一公公道)小李子,免了他们的罪,每人发一张车票,让他们回家过年吧!\n " + "还有,把这个编号" + prisoner.getUuid() + "的留下,咱们那个软件部不是缺个HR经理吗?\n 就让他去,让他出逻辑题,考死那帮来面试的孙子!\n 哈哈哈。。。就这么办,朕先洗洗睡了。。。"); return; } System.out.println("王:居然敢戏弄寡人,全部拉出去砍了!!!"); System.out.println("犯:大王铙命啊!程序有Bug总是难免的嘛,让我再调试一下啊!"); } /** * 开始游戏 */ public void startGame() { gameRunning.set(true); new Thread(new Runnable() { public void run() { Light light = new Light(); Yard yard = new Yard(); yard.setLight(light); for (int i = 0; i < COUNT_OF_PRISONERS; i++) { Prisoner prisoner = new Prisoner(i, yard, King.this); prisoners[i] = prisoner; } System.out.println("启禀陛下,要参加游戏的犯人已全部就位!"); Random random = new Random(); int randNum = random.nextInt(COUNT_OF_PRISONERS); prisoners[randNum].setAsCounter(); System.out.println("犯人们经过商量,得出计谋,并随机选到编号" + randNum + "的犯人作为计数员。。。"); System.out.println("游戏开始!"); // 没人报道游戏结束时,每天随机选出一个犯人到院子放风 while (gameRunning.get()) { int randIndex = random.nextInt(COUNT_OF_PRISONERS); // System.out.println("今天选到" + randIndex); prisoners[randIndex].outForExercise(); outedPrisonersSet.add(prisoners[randIndex]); countOfDays++; // 休息一天 // TimeUnit.DAYS.sleep(1); } } }).start(); } public static void main(String[] args) { new King().startGame(); } }
package com.javaeye.hkliya.prisongame; /** * 路灯 * @author Administrator * */ public class Light { // 灯的状态,一开始是关着的 private boolean state = false; /** * 开灯 */ public void turnOn() { state = true; } /** * 关灯 */ public void turnOff() { state = false; } /** * 灯是否开着? * @return true 表示灯开着 * false 表示灯关着 */ public boolean isOn() { return state; } }
package com.javaeye.hkliya.prisongame; /** * 犯人 * @author Administrator * */ public class Prisoner { // 犯人编号 private int uuid; // 是否计数员? true表示此犯人是计数员,false表示此犯人不是计数员 private boolean isCounter; // 关灯次数 private int turnOffTimes; // 此犯人放过风没? private boolean isFirstTime = true; private Yard yard; private King king; public Prisoner(int uuid, Yard yard, King king) { this.uuid = uuid; this.yard = yard; this.king = king; } /** * 指定此犯人为计数人 */ public void setAsCounter() { isCounter = true; } /** * 取得犯人的编号 * @return 该犯人编号 */ public int getUuid() { return uuid; } /** * 放风 */ public void outForExercise() { Light light = yard.getLight(); // 计数员 if (isCounter) { if (light.isOn()) { light.turnOff(); turnOffTimes++; if (turnOffTimes == King.COUNT_OF_PRISONERS-1) { king.accomplishTask(this); } } return; } // 普通犯人 if (isFirstTime && !light.isOn()) { light.turnOn(); isFirstTime = false; } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + uuid; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Prisoner other = (Prisoner) obj; if (uuid != other.uuid) return false; return true; } }
package com.javaeye.hkliya.prisongame; /** * 供犯人放风的院子 * * @author Administrator * */ public class Yard { // 院子里有一盏路灯 private Light light; public Light getLight() { return light; } public void setLight(Light light) { this.light = light; } }
如果灯本来就开着的,计数员关99次灯够吗?
为了简单,我是假设灯初始是关着的
这个原帖有讨论
哦。最好在发帖的时候写上这个假设,可以省大家点时间,因为原帖也没说这个条件,可能后来讨论有说(不过数十页的讨论...)。
83 楼
hkliya
2010-01-17
wannago 写道
hkliya 写道
题目要求请看原帖http://www.iteye.com/topic/569275
此题的解题思路是:从100个犯人中指定一个作为计数员。当每天随机挑一个犯人放风时,如果是普通犯人,如果他是第一次放风并且灯是关着的,就把灯打开,如果是计数员,他看见灯开着,他就给关掉,并记录总共关了多少次灯,当关到99次时,说明所有人都放过风了。
下面是我自己感觉写的还行的代码,请大牛们帮我挑挑毛病
我的意思是这几个类的设计是否合理,哪个对象里应该持有哪个对象的引用这些方面
或者从扩展性,维护性来说有哪些不足,谢谢大家
===================================
已更新第二版代码,加入log4j和继承
此题的解题思路是:从100个犯人中指定一个作为计数员。当每天随机挑一个犯人放风时,如果是普通犯人,如果他是第一次放风并且灯是关着的,就把灯打开,如果是计数员,他看见灯开着,他就给关掉,并记录总共关了多少次灯,当关到99次时,说明所有人都放过风了。
下面是我自己感觉写的还行的代码,请大牛们帮我挑挑毛病
我的意思是这几个类的设计是否合理,哪个对象里应该持有哪个对象的引用这些方面
或者从扩展性,维护性来说有哪些不足,谢谢大家
===================================
已更新第二版代码,加入log4j和继承
package com.javaeye.hkliya.prisongame; import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; /** * 变态的国王 * * @author Administrator * */ public class King { // 参与此变态游戏的犯人数 public static final int COUNT_OF_PRISONERS = 100; // 游戏是否进行中 private AtomicBoolean gameRunning = new AtomicBoolean(); // 游戏进行的天数 private int countOfDays; // 所有犯人 private Prisoner[] prisoners = new Prisoner[COUNT_OF_PRISONERS]; // 放过风的犯人 private Set<Prisoner> outedPrisonersSet = new HashSet<Prisoner>(); /** * 是否所有犯人都已放过风? * * @return */ private boolean isAllOuted() { return outedPrisonersSet.size() == COUNT_OF_PRISONERS; } /** * 某个犯人报告国王他完成了任务 * * @param prisoner * 来报告的犯人 */ public void accomplishTask(Prisoner prisoner) { gameRunning.set(false); System.out.println("犯:我亲爱的国王陛下,您的犯人编号" + prisoner.getUuid() + "可以肯定的告诉您,我的兄弟们全都到院子放过风了!"); System.out.println("王:Oh, 真的吗?等我看一下记录先。。。"); System.out.println("国王查看记录中。。。"); System.out.println("5秒钟后。。。"); if (isAllOuted()) { System.out.println("王:哇靠!真的呢!你不会是蒙的吧?"); System.out.println("犯:My dear king! 吾已是戴罪之身,又岂敢再欺君犯上?且听我慢慢道来。。。"); System.out.println("省略500字。。。"); System.out .println("王:人才!你TM真是个人才!虽然用了" + countOfDays + "天,不过还是达到要求了!I服了You!\n " + "(国王转头对旁边一公公道)小李子,免了他们的罪,每人发一张车票,让他们回家过年吧!\n " + "还有,把这个编号" + prisoner.getUuid() + "的留下,咱们那个软件部不是缺个HR经理吗?\n 就让他去,让他出逻辑题,考死那帮来面试的孙子!\n 哈哈哈。。。就这么办,朕先洗洗睡了。。。"); return; } System.out.println("王:居然敢戏弄寡人,全部拉出去砍了!!!"); System.out.println("犯:大王铙命啊!程序有Bug总是难免的嘛,让我再调试一下啊!"); } /** * 开始游戏 */ public void startGame() { gameRunning.set(true); new Thread(new Runnable() { public void run() { Light light = new Light(); Yard yard = new Yard(); yard.setLight(light); for (int i = 0; i < COUNT_OF_PRISONERS; i++) { Prisoner prisoner = new Prisoner(i, yard, King.this); prisoners[i] = prisoner; } System.out.println("启禀陛下,要参加游戏的犯人已全部就位!"); Random random = new Random(); int randNum = random.nextInt(COUNT_OF_PRISONERS); prisoners[randNum].setAsCounter(); System.out.println("犯人们经过商量,得出计谋,并随机选到编号" + randNum + "的犯人作为计数员。。。"); System.out.println("游戏开始!"); // 没人报道游戏结束时,每天随机选出一个犯人到院子放风 while (gameRunning.get()) { int randIndex = random.nextInt(COUNT_OF_PRISONERS); // System.out.println("今天选到" + randIndex); prisoners[randIndex].outForExercise(); outedPrisonersSet.add(prisoners[randIndex]); countOfDays++; // 休息一天 // TimeUnit.DAYS.sleep(1); } } }).start(); } public static void main(String[] args) { new King().startGame(); } }
package com.javaeye.hkliya.prisongame; /** * 路灯 * @author Administrator * */ public class Light { // 灯的状态,一开始是关着的 private boolean state = false; /** * 开灯 */ public void turnOn() { state = true; } /** * 关灯 */ public void turnOff() { state = false; } /** * 灯是否开着? * @return true 表示灯开着 * false 表示灯关着 */ public boolean isOn() { return state; } }
package com.javaeye.hkliya.prisongame; /** * 犯人 * @author Administrator * */ public class Prisoner { // 犯人编号 private int uuid; // 是否计数员? true表示此犯人是计数员,false表示此犯人不是计数员 private boolean isCounter; // 关灯次数 private int turnOffTimes; // 此犯人放过风没? private boolean isFirstTime = true; private Yard yard; private King king; public Prisoner(int uuid, Yard yard, King king) { this.uuid = uuid; this.yard = yard; this.king = king; } /** * 指定此犯人为计数人 */ public void setAsCounter() { isCounter = true; } /** * 取得犯人的编号 * @return 该犯人编号 */ public int getUuid() { return uuid; } /** * 放风 */ public void outForExercise() { Light light = yard.getLight(); // 计数员 if (isCounter) { if (light.isOn()) { light.turnOff(); turnOffTimes++; if (turnOffTimes == King.COUNT_OF_PRISONERS-1) { king.accomplishTask(this); } } return; } // 普通犯人 if (isFirstTime && !light.isOn()) { light.turnOn(); isFirstTime = false; } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + uuid; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Prisoner other = (Prisoner) obj; if (uuid != other.uuid) return false; return true; } }
package com.javaeye.hkliya.prisongame; /** * 供犯人放风的院子 * * @author Administrator * */ public class Yard { // 院子里有一盏路灯 private Light light; public Light getLight() { return light; } public void setLight(Light light) { this.light = light; } }
如果灯本来就开着的,计数员关99次灯够吗?
为了简单,我是假设灯初始是关着的
这个原帖有讨论
82 楼
hkliya
2010-01-17
wushexu 写道
要是我写就不会对那么多东西建模,没有必要
要是我就不回这么无聊的帖子,没有必要
81 楼
wannago
2010-01-17
hkliya 写道
题目要求请看原帖http://www.iteye.com/topic/569275
此题的解题思路是:从100个犯人中指定一个作为计数员。当每天随机挑一个犯人放风时,如果是普通犯人,如果他是第一次放风并且灯是关着的,就把灯打开,如果是计数员,他看见灯开着,他就给关掉,并记录总共关了多少次灯,当关到99次时,说明所有人都放过风了。
下面是我自己感觉写的还行的代码,请大牛们帮我挑挑毛病
我的意思是这几个类的设计是否合理,哪个对象里应该持有哪个对象的引用这些方面
或者从扩展性,维护性来说有哪些不足,谢谢大家
===================================
已更新第二版代码,加入log4j和继承
此题的解题思路是:从100个犯人中指定一个作为计数员。当每天随机挑一个犯人放风时,如果是普通犯人,如果他是第一次放风并且灯是关着的,就把灯打开,如果是计数员,他看见灯开着,他就给关掉,并记录总共关了多少次灯,当关到99次时,说明所有人都放过风了。
下面是我自己感觉写的还行的代码,请大牛们帮我挑挑毛病
我的意思是这几个类的设计是否合理,哪个对象里应该持有哪个对象的引用这些方面
或者从扩展性,维护性来说有哪些不足,谢谢大家
===================================
已更新第二版代码,加入log4j和继承
package com.javaeye.hkliya.prisongame; import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; /** * 变态的国王 * * @author Administrator * */ public class King { // 参与此变态游戏的犯人数 public static final int COUNT_OF_PRISONERS = 100; // 游戏是否进行中 private AtomicBoolean gameRunning = new AtomicBoolean(); // 游戏进行的天数 private int countOfDays; // 所有犯人 private Prisoner[] prisoners = new Prisoner[COUNT_OF_PRISONERS]; // 放过风的犯人 private Set<Prisoner> outedPrisonersSet = new HashSet<Prisoner>(); /** * 是否所有犯人都已放过风? * * @return */ private boolean isAllOuted() { return outedPrisonersSet.size() == COUNT_OF_PRISONERS; } /** * 某个犯人报告国王他完成了任务 * * @param prisoner * 来报告的犯人 */ public void accomplishTask(Prisoner prisoner) { gameRunning.set(false); System.out.println("犯:我亲爱的国王陛下,您的犯人编号" + prisoner.getUuid() + "可以肯定的告诉您,我的兄弟们全都到院子放过风了!"); System.out.println("王:Oh, 真的吗?等我看一下记录先。。。"); System.out.println("国王查看记录中。。。"); System.out.println("5秒钟后。。。"); if (isAllOuted()) { System.out.println("王:哇靠!真的呢!你不会是蒙的吧?"); System.out.println("犯:My dear king! 吾已是戴罪之身,又岂敢再欺君犯上?且听我慢慢道来。。。"); System.out.println("省略500字。。。"); System.out .println("王:人才!你TM真是个人才!虽然用了" + countOfDays + "天,不过还是达到要求了!I服了You!\n " + "(国王转头对旁边一公公道)小李子,免了他们的罪,每人发一张车票,让他们回家过年吧!\n " + "还有,把这个编号" + prisoner.getUuid() + "的留下,咱们那个软件部不是缺个HR经理吗?\n 就让他去,让他出逻辑题,考死那帮来面试的孙子!\n 哈哈哈。。。就这么办,朕先洗洗睡了。。。"); return; } System.out.println("王:居然敢戏弄寡人,全部拉出去砍了!!!"); System.out.println("犯:大王铙命啊!程序有Bug总是难免的嘛,让我再调试一下啊!"); } /** * 开始游戏 */ public void startGame() { gameRunning.set(true); new Thread(new Runnable() { public void run() { Light light = new Light(); Yard yard = new Yard(); yard.setLight(light); for (int i = 0; i < COUNT_OF_PRISONERS; i++) { Prisoner prisoner = new Prisoner(i, yard, King.this); prisoners[i] = prisoner; } System.out.println("启禀陛下,要参加游戏的犯人已全部就位!"); Random random = new Random(); int randNum = random.nextInt(COUNT_OF_PRISONERS); prisoners[randNum].setAsCounter(); System.out.println("犯人们经过商量,得出计谋,并随机选到编号" + randNum + "的犯人作为计数员。。。"); System.out.println("游戏开始!"); // 没人报道游戏结束时,每天随机选出一个犯人到院子放风 while (gameRunning.get()) { int randIndex = random.nextInt(COUNT_OF_PRISONERS); // System.out.println("今天选到" + randIndex); prisoners[randIndex].outForExercise(); outedPrisonersSet.add(prisoners[randIndex]); countOfDays++; // 休息一天 // TimeUnit.DAYS.sleep(1); } } }).start(); } public static void main(String[] args) { new King().startGame(); } }
package com.javaeye.hkliya.prisongame; /** * 路灯 * @author Administrator * */ public class Light { // 灯的状态,一开始是关着的 private boolean state = false; /** * 开灯 */ public void turnOn() { state = true; } /** * 关灯 */ public void turnOff() { state = false; } /** * 灯是否开着? * @return true 表示灯开着 * false 表示灯关着 */ public boolean isOn() { return state; } }
package com.javaeye.hkliya.prisongame; /** * 犯人 * @author Administrator * */ public class Prisoner { // 犯人编号 private int uuid; // 是否计数员? true表示此犯人是计数员,false表示此犯人不是计数员 private boolean isCounter; // 关灯次数 private int turnOffTimes; // 此犯人放过风没? private boolean isFirstTime = true; private Yard yard; private King king; public Prisoner(int uuid, Yard yard, King king) { this.uuid = uuid; this.yard = yard; this.king = king; } /** * 指定此犯人为计数人 */ public void setAsCounter() { isCounter = true; } /** * 取得犯人的编号 * @return 该犯人编号 */ public int getUuid() { return uuid; } /** * 放风 */ public void outForExercise() { Light light = yard.getLight(); // 计数员 if (isCounter) { if (light.isOn()) { light.turnOff(); turnOffTimes++; if (turnOffTimes == King.COUNT_OF_PRISONERS-1) { king.accomplishTask(this); } } return; } // 普通犯人 if (isFirstTime && !light.isOn()) { light.turnOn(); isFirstTime = false; } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + uuid; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Prisoner other = (Prisoner) obj; if (uuid != other.uuid) return false; return true; } }
package com.javaeye.hkliya.prisongame; /** * 供犯人放风的院子 * * @author Administrator * */ public class Yard { // 院子里有一盏路灯 private Light light; public Light getLight() { return light; } public void setLight(Light light) { this.light = light; } }
如果灯本来就开着的,计数员关99次灯够吗?
80 楼
hkliya
2010-01-17
metaphy 写道
*********************************************************************
不 要 过 度 设 计!
*********************************************************************
太严肃了
79 楼
wushexu
2010-01-17
要是我写就不会对那么多东西建模,没有必要
78 楼
wannago
2010-01-17
红楼一梦 写道
linhong_1001 写道
不知道是怎么个好法?是若是OO,第一种稍微强点,可是代码中那么多废话也要命。还有那个老是C++什么的,现在又不是在C++,既然要写java就像点java。
C++没什么不好的啊,C++也是OO的。Java不也是从c++发展过来的吗?刚学Java,觉得Java规范太多,C++灵活些。我觉得我写的很像Java。等号两边加不加空格,if语句怎么写这完全是个人习惯,无关大局,有必要争论吗?
即使是c或者c++也不推荐用magic number。特别是你一会儿是100,一会儿是99,而且注释里也有这些数字,以后你未必记得到底99是100-1得来的,还是一个不相关的magic number。
相关推荐
在本节"3.3 谁是罪犯?-简单逻辑分析1"中,主要涉及的是Python编程语言中的逻辑判断语句,特别是`if`条件语句的使用以及其等价表达方式。我们将深入探讨这些知识点,并通过几个示例进行解析。 首先,我们来看一道...
用单向循环链表实现了对点杀罪犯问题(约瑟夫问题)的处理。
用java得到一个罪犯的xml例子,并生成了节点信息!给大家参考
### 知识点一:狱内罪犯危险性评估系统概述 #### 1.1 选题背景与意义 随着社会的发展与进步,狱政管理面临着越来越多的挑战,特别是对于狱内罪犯的管理和改造工作。传统的狱政管理模式在面对大量罪犯时显得...
《罪犯档案管理系统》是一款专为监狱管理设计的人工智能应用程序,旨在高效、精确地记录和处理罪犯的各类信息。这款系统集成了先进的技术,包括信息管理系统、HTML前端开发以及系统分析与设计的原理,以实现数据的...
在这个场景中,目标是确保每个有牵连的犯人都不能被关在同一间关押室,以防止他们串供。这个问题可以通过关系矩阵和特定的计算步骤来解决。 1. **关系矩阵构建**:首先,建立一个8x8的关系矩阵,表示犯人之间的关系...
《罪犯劳动管理》课程标准主要探讨的是监狱在执行刑罚和改造罪犯过程中如何有效利用劳动作为改造手段,旨在培养罪犯的劳动习惯、技能,并保护其合法权益。这是一门实践性强、应用性高的课程,对监狱管理专业的学生至...
罪犯改造评估是一项复杂的任务,涉及到多个维度的数据分析,如罪犯的个人资料、犯罪记录、改造表现等。在Access中,这些信息被精心组织成数据库表,每个表都有清晰的字段定义,如罪犯ID、姓名、年龄、犯罪类型、改造...
《网络游戏-基于Zigbee无线网络和GPRS无线网络的犯人监控系统》是一个结合了现代信息技术与安全监控的创新方案。该系统的核心是利用Zigbee无线网络和GPRS无线网络的技术,实现对犯人的实时、高效监控,确保监狱管理...
react-native-app-qiufit, 罪犯调节追踪程序 #Convict 调节跟踪器##Screenshot ##App 存储 ##Play 存储 ##AUTHOR按chengzhen设计##LICENSE GNU通用 public 许可证版本 3,29
所以,按照逻辑推理,如果假设只有一个说谎者,丁是真正的罪犯。这个问题展示了在解决逻辑谜题时,如何通过分析矛盾来确定真相,这也是小学数学教育中培养逻辑思维能力的一种方式。通过这样的问题,孩子们可以学习到...
因此,这是一个定性的探索性研究,包括两个阶段:抽样和分析,这支持名为“专业教育计划”的模型的开发和应用,该模型强调了EnSp的“创业螺旋—PEP”。 此后,介绍了数据分析和专业技能的发展,结果积极表明通过与...
这里我们关注的是一种特别的应用场景——犯人信息采集装置。这个装置是电信技术与司法管理相结合的产物,旨在提高监狱管理和犯人信息处理的效率。 犯人信息采集装置通常包含了多种技术集成,例如生物识别技术(如...
这项研究的目的是比较因家庭暴力侵害女性伴侣或配偶而被法庭命令接受家庭暴力治疗的男性(家庭暴力罪犯; DVO)(n = 35)和一组非暴力男性(n = 35)面部表情识别以及自我认同感,认知能力,外伤史和人口统计学信息...
### 信息化背景下提高罪犯教育改造质量的关键知识点 #### 一、监狱信息化的概念与目标 - **定义**:监狱信息化是指运用信息技术手段,包括信息处理、网络通讯、生物识别等,对监狱内部的信息进行采集、传输和管理...
监狱犯人自动考勤系统解决方案的计数管理软件界面提供了一个友好的用户界面,方便用户对犯人进行考勤和管理。 八、产品照片 监狱犯人自动考勤系统解决方案的产品照片展示了产品的外观和实际应用场景。
罪犯的个别教育是个体化、针对性强的教育方式,旨在针对每个罪犯的独特情况,实施个性化教育,从而达到改造的目的。 首先,开展罪犯个别教育需运用科学的手段。这包括科学地认识、分析和管理罪犯。理解罪犯不仅是...
本项目是一个综合性的Java毕业设计项目,旨在通过Spring Boot框架与Vue.js前端技术,实现一个狱内罪犯危险性评估系统。该系统不仅为监狱管理提供了一个科学、高效的评估工具,同时也为Java学习者提供了一个实战练习...
罪犯矫正心理学家的作用与冲突,王恩界,乐国安,罪犯矫正心理学家可以在监狱机构内发挥重要的作用,他们能够参与罪犯分类管理、假释鉴定、评估罪犯的心理问题、实施罪犯心理矫治