*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 弑神饕餮 QQ:468013111
*/ 时间: 2007-7-25 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
今天基本上都耗在这个题上了,有所感悟,觉得有些东西值得再三考虑之后再动手来做,先让我们来看这个小程序,再告诉大家我为什么有此感悟~~~
题目是这样的:一群小孩围成一圈,任意假定一个数m,从每一个小孩起,顺时针方向数,每数到m个小孩时,就将该小孩T出去,然后从下一个继续数,小孩不断离开,圈子不断缩小。最后剩下的那个就是胜利者。求解最后胜利的是第几个小孩。题目要求:用数组来做。
这是我一开始写得代码,错了~~~大错特错~~~
public class josephus {
public static void main (String[] args) {
int sum=0;
int m=3;
int a[]={0,1,2,3,4,5,6,7,8,9};
for(int i=0;sum<9;i+=3){
while(i>9){
i-=10;
}
while(a[i]==10){
i++;
}
a[i]=10;
sum++;
}
for(int i=0;i<10;i++){
if(a[i]!=10) System.out.println("the winner is "+a[i]);
}
}
}
做出来之后我很兴奋,谁知道一试结果得不到我所要的结果,我很沮丧,下午,我静下心来,重新看了好多便代码终于发现了一个致命的错误,使我的代码完全就是错误的~~~于是我重写了代码,我怀着虔诚,虚心的态度改了又改,终于让我做出另我满意的程序(如下),我又好高兴好高兴~~~
public class xiaohai {
public static void main (String[] args) {
final int M=3,N=10;//M为指定个数,N为小孩的个数
int a[]=new int[N];
int n=0,sum=0;//n与M搭配 sum为被T出小孩的个数
for(int i=0;sum<N-1;i++){
if(i>N-1) i=0;
while(a[i]==10){
i++;
if(i>N-1) i=0;
}
while(a[i]!=10){
n++;
if(n==M){
sum++;
n=0;
a[i]=10;//若被T出则另a[i]=10 作为标志
}
i++;
if(i>N-1) i=0;
}
}
for(int i=0;i<N;i++){
if(a[i]!=10) System.out.println("the winner is "+i);
}
}
}
然后,高兴过后,我又仔细思考了我前一个题的致命错误,想了一下,如果用jdk1.5中的list容器,就不会出现这样的错误,而且代码会变得清晰明了,所以又打算用list来重写代码,可是想到自己对容器还不熟悉,所以没写,但让我悟出了开头说的道理――有些东西值得再三考虑之后再动手来做~~~
----------------解决方案--------------------------------------------------------
明显应该用Vector或者ArrayList嘛。
----------------解决方案--------------------------------------------------------
所以我说要再三考虑才能下手嘛,而且容器那部分还没有怎么看那,只是有点点印象而已~~~而且题目要求是用数组做,是数组部分的一个联系题~~
----------------解决方案--------------------------------------------------------
终于再见到我稍微熟悉点的结构化语言了...呵呵 以前用C链表写出这个的时候也很兴奋!
不过我认为 LZ 用java写它能不能写出java的特点啊,好让新手了解下java的面象对象..呵呵
另外自己一直(快2个星期了)在看java技术手册,感觉不太适合新手.
----------------解决方案--------------------------------------------------------
是啊 我这个方法 用C也能写 因为它要求用数组嘛 所以我只能用数组了 听说用链表做要简单的多 但是用JAVA中的容器 会更简单
java技术手册?我没看过啊。。。不过听 千里冰封 推荐过这本书 可是我觉得 新手入门应该随便找一本书 只要全一点就行 不要看太高深的书 像thinking in java 这样的看起来有点难度不适合新手去看 要看的话 去看中国人写的 他会告诉你java的大体框架 但不要指望只靠那一本书就能学好 j2se。我一直以为中国有关的java书没有好的,但是我昨天我发现我这个想法是多么的愚蠢,中国IT人士如此厉害怎么会没有本好书呢?昨天看了一本张孝祥的书觉得写得就很不错,不过是电子版的而且版本有点过时用的是jdk1.4~~~我还是支持书要看用纸做的,嘿嘿,希望对你能有点帮助,我也是个新手,大家一起加油加油~~~~
----------------解决方案--------------------------------------------------------
楼主以后写代码的时候还是加点说明嘛,我看了好久哦。
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
典型例子相信大家都已经熟悉了~
----------------解决方案--------------------------------------------------------