论坛首页 Java企业应用论坛

国王和100个犯人-

浏览 25933 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-01-15  
红楼一梦 写道
hkliya 写道

light=false; // 等号两边加空格哦

private HashMap<Integer,Prisoner> Prison; //变量名首字母小写哦

if(!once&&!light){   // 两个否定很晕哦

 

for(int i=1;i<100;i++)   //100这个Magic Number是什么意思哦

 

我从c++过来的,留着很多c++的习惯。等号两边加不加空格和变量小不小写这样的细节还的确没注意过。以前写c++从来不管这些。两个否定嘛,也是从c++那边搬来的习惯。我觉得c++的代码简洁,Java代码不如c++灵活。100这个数字,楼主要是不明白那我就没办法了,100个囚犯啊。


两个否定怎么是从C++里来的啊?

还有这个100不是我不知道什么意思,假如现在要换成200个人,那你不是要改很多地方么

0 请登录后投票
   发表时间:2010-01-15  
hkliya 写道
红楼一梦 写道
hkliya 写道

light=false; // 等号两边加空格哦

private HashMap<Integer,Prisoner> Prison; //变量名首字母小写哦

if(!once&&!light){   // 两个否定很晕哦

 

for(int i=1;i<100;i++)   //100这个Magic Number是什么意思哦

 

我从c++过来的,留着很多c++的习惯。等号两边加不加空格和变量小不小写这样的细节还的确没注意过。以前写c++从来不管这些。两个否定嘛,也是从c++那边搬来的习惯。我觉得c++的代码简洁,Java代码不如c++灵活。100这个数字,楼主要是不明白那我就没办法了,100个囚犯啊。


两个否定怎么是从C++里来的啊?

还有这个100不是我不知道什么意思,假如现在要换成200个人,那你不是要改很多地方么

以前写C/C++都是直接写if(a)或if(!a),从来不写if(a!=0)或if(a==0)。Java中我就也这样写了。改成200只要改两个数字,我写的时候没考虑太多扩展性。其实可以把100作为一个静态常量写到Prisoner里。

0 请登录后投票
   发表时间:2010-01-15  
for(;;){}这样的语句在JDK src里经常看的到
大概while(true){}每次循环还得判断条件true? 而
第一种直接循环  效率高吧
哈哈
0 请登录后投票
   发表时间:2010-01-15  
哈哈,看了这么多,我觉得很奇特的一点是:犯人怎么会有灯亮和灯灭的属性?难道犯人自己会亮,自己会灭。
0 请登录后投票
   发表时间:2010-01-15  
灯的实现是一个单例模式,不同意的不要顶
0 请登录后投票
   发表时间:2010-01-15  
liuyu220 写道
灯的实现是一个单例模式,不同意的不要顶

灯是可以坏的哦,坏了是可以换的
所以灯放在院子里,犯人知道院子在哪里就行了
0 请登录后投票
   发表时间:2010-01-15  
红楼一梦 写道
hkliya 写道
红楼一梦 写道
hkliya 写道

light=false; // 等号两边加空格哦

private HashMap<Integer,Prisoner> Prison; //变量名首字母小写哦

if(!once&&!light){   // 两个否定很晕哦

 

for(int i=1;i<100;i++)   //100这个Magic Number是什么意思哦

 

我从c++过来的,留着很多c++的习惯。等号两边加不加空格和变量小不小写这样的细节还的确没注意过。以前写c++从来不管这些。两个否定嘛,也是从c++那边搬来的习惯。我觉得c++的代码简洁,Java代码不如c++灵活。100这个数字,楼主要是不明白那我就没办法了,100个囚犯啊。


两个否定怎么是从C++里来的啊?

还有这个100不是我不知道什么意思,假如现在要换成200个人,那你不是要改很多地方么

以前写C/C++都是直接写if(a)或if(!a),从来不写if(a!=0)或if(a==0)。Java中我就也这样写了。改成200只要改两个数字,我写的时候没考虑太多扩展性。其实可以把100作为一个静态常量写到Prisoner里。


if(!once&&!light){   

          light=true;   

          once=true;   

}

 

我觉得这样比较容易读:

if (once || light) {

         return;

}

 

light = true;

once = true;

你觉得呢

0 请登录后投票
   发表时间:2010-01-15  
antiwise 写道
for(;;){}这样的语句在JDK src里经常看的到
大概while(true){}每次循环还得判断条件true? 而
第一种直接循环  效率高吧
哈哈

这位大大,两种写法的意义和效果都是完全一样的呀
public class A {
  public void b() { for (;;) ; }
  public void c() { while(true) ; }
}

出来的b和c的字节码是完全一样的
Code:
 Stack=0, Locals=1, Args_size=1
 0:   goto    0
0 请登录后投票
   发表时间:2010-01-15   最后修改:2010-01-15
bugmenot 写道
antiwise 写道
for(;;){}这样的语句在JDK src里经常看的到
大概while(true){}每次循环还得判断条件true? 而
第一种直接循环  效率高吧
哈哈

这位大大,两种写法的意义和效果都是完全一样的呀
public class A {
  public void b() { for (;;) ; }
  public void c() { while(true) ; }
}
出来的b和c的字节码是完全一样的
Code:
 Stack=0, Locals=1, Args_size=1
 0:   goto    0


是哦,我也测试了一下,应该是编译期优化的结果吧
public class For{
   public void testFor() {
      for(;;){
      	 int i=0;
      }
   }
	
   public void testWhile(){
      while(true){
         int i=0;
      }
   }
}


javap -c For结果是:
Compiled from "For.java"
public class For extends java.lang.Object{
public For();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public void testFor();
  Code:
   0:   iconst_0
   1:   istore_1
   2:   goto    0

public void testWhile();
  Code:
   0:   iconst_0
   1:   istore_1
   2:   goto    0

}
code]
    
0 请登录后投票
   发表时间:2010-01-15  
myreligion 写道
在我看来,程序内出现System.out.println一般都在1年以内,或者只相当于一年以内。呵呵~~

学过方法论没,具体问题具体分析

6 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics