当前位置: 首页 > 工具软件 > Puzzle Game > 使用案例 >

Java Puzzlers 之Puzzle 4: It's Elementary

姬俊远
2023-12-01

Puzzle 4: It's Elementary

好,上一个难题有点狡猾,但是它是关于除法的。每个人都知道除法很麻烦。现在这个程序仅仅关于加法。那么它输出的结果是什么呢?

 

public class Elementary {
    public static void main(String[] args) {
        System.out.println(12345 + 
        
        
         
         5432l
        
        );
    }

}

 

Solution 4  It’s elementary

 

第一眼看到它,它看起来是个很容易的难题—容易的你根本不用铅笔或者纸。运算符左边的数从1增加到5,右边的数从5减小到1。因此,相应的数字之和不变,程序的输出结果一定是66666。分析这个难题只有一个问题:当你运行程序,它输出17777。难道java程序很讨厌这样一组数字?不知为何这并不是个似是而非的解释。

事情很少与被看到的一致。就拿这个程序来说。它并不是你所想象的那样。仔细查看运算符+的两边。我们用int12345加上一个long型的数 5432 l 。请仔细比较细微差别:运算符左边开始的数字1和运算符最后的小写字母l。数字1在水平划(或者arm)和垂直划(或者stem)之间为锐角,而小写字母el,在armstem之间是直角。

在你大声喊冤之前,请注意这个问题确实引起实在的混淆。同时注意到这个难题的标题就包含了一个按时:它是El-ementary;看到了吗?最后,注意这是个真实的教训。记住一定要使用大写字母el(L)来表示long型数字,而不是使用小写字母el(l)。这才能正在消除这个难题的混淆依赖的根源:

System.out.println(12345 + 
   
   
    
    5432
    
    L
   
   );

同样的,尽量避免使用单独的小写字母ell)来表示一个变量。很难在程序代码中来区分是list  l还是数字1

      
      
       
        
      
      
// Bad code - uses el (l) as a variable name
      
      
       
        
      
      
List<String> l = new ArrayList<String>();
      
      
       
        
      
      
l.add("Foo");
      
      
       
        
      
      
System.out.println(1);
      
      
       
        
      
      
  
  
   
    
  
  
总而言之,小写字母 el 和数字 1 在印刷体中很难以区分。为了不使你的程序阅读者产生混淆,请不要使用小写字母 el 在结尾来表示 long 型数字或者作为变量名。 Java 继承了很多 C 语言的东西,包括 long 型的语法。允许使用小写字母 el 来表示 long 型或许就是它的一个错误。 
 类似资料: