原文地址:http://coolshell.cn/?p=1391
以下是内容:
上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:
http://forums.sun.com/thread.jspa?threadID=5404590&start=0&tstart=0
LZ的贴子翻译如下:
大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊。比如把-12转成+12。是
的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法。非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个正确的
方向——比如使用一些数学库或是二进制方法什么的。谢谢!
这个贴子的沙发给出了答案:
n = -n;
LZ在四楼回复到:
我知道是个很简单的事,可我没有想到居然这么简单,我觉得你可能是对的。谢谢你。
过了一会,又回复到:
不开玩笑地说,我试了,真的没有问题耶!
看到这样的贴子,就能想到国内论坛上很多这样的“问弱智问题的贴子”,结果可能都会是比较惨!是的,国外的互联网文化和国内差不多,都是恶搞的人多
于热心的人,呵呵。不过,国外的网民们有一点是好的,再恶搞也是就事搞事,不会有侮辱人的语言,这点真是值国内的人学习。
这本是一个平淡无奇的贴子,不过回复中那些恶搞的“解决方案”太强大了,在这里例举一下吧。
贴子的板凳给出了这样的答案(这是恶搞的开始)
01 |
int x = numberToInvertSign; |
03 | for(int i = 0; i < 2*Math.abs(x); i++){ |
然后,有人说,n = -n 可以是可以,但不够晦涩,于是一个晦涩的解决方案出现了:
2 | n
= (0xffffffff ^ n) + 1; |
然后,又出现了一些看似简单,其实是比较晦涩的方案
继续,有才的人从来就不少:
3 | for (m= 1; m != 0 &&
((n&m) != 0); m<<= 1); |
6 | else for (m >>= 1; m != 0; n^= m, m>>=1); |
呵呵,开始越来越强大了,我以前也向大家介绍过《如何加密/弄乱C源代码》的文章,和这些恶搞的人可能有点相似吧。上面这
个例子一出,大家都在讨论上面例子中的for循环语句,呵呵,很费解啊。
然后,后面几个就开始乱来了:
1 |
public int invert(int i) { |
6 | // ... etc, you get the proper pattern |
不过事情还没有结束,看看下面这个吧,OMG。
01 |
int absoluteValue(int num) |
04 |
for(int i = 0; true; ++i) |
06 | max
= i > max ? i : max; |
还有用字符串的解决方案:
01 |
public int invert(int n) { |
02 | String nStr = String.valueOf(n); |
04 | if (nStr.startsWith("-")) { |
05 | nStr = nStr.replace("-", ""); |
10 | return Integer.parseInt(nStr); |
别忘了面象对象,有最新Java支持的模板库:
01 |
public interface Negatable<T extends
Number> { |
08 | public abstract class
NegatableInteger implements Negatable<Integer>
{ |
09 | private final int value; |
11 | protected NegatableInteger(int value) { |
15 | public static NegatableInteger createNegatableInteger(int value) { |
17 | return new NegatablePositiveInteger(value); |
19 | else if (value ==
Integer.MIN_VALUE) { |
20 | throw new IllegalArgumentException("cannot negate " + value); |
23 | return new NegatableNegativeInteger(value); |
26 | return new NegatableZeroInteger(value); |
30 | public Integer value() { |
34 | public Integer negate() { |
35 | String negatedString = negateValueAsString (); |
36 | Integer negatedInteger = Integer.parseInt(negatedString); |
37 | return negatedInteger; |
40 | protected abstract String negateValueAsString (); |
45 |
public class NegatablePositiveInteger
extends NegatableInteger { |
46 | public NegatablePositiveInteger(int value) { |
50 | protected String
negateValueAsString () { |
51 | String valueAsString = String.valueOf (value()); |
52 | return "-" + valueAsString; |
58 | public class NegatableNegativeInteger
extends NegatableInteger { |
59 | public NegatableNegativeInteger
(int value)
{ |
63 | protected String
negateValueAsString () { |
64 | String valueAsString = String.valueOf (value()); |
65 | return valueAsString.substring(1); |
71 | public class NegatableZeroInteger
extends NegatableInteger { |
72 | public NegatableZeroInteger (int value) { |
76 | protected String
negateValueAsString () { |
77 | return String.valueOf
(value()); |
这个贴子基本上就是两页,好像不算太严重,如果你这样想的话,你就大错特错了。这个贴子被人转到了reddit.com,于是一发不可收拾,在上面
的回贴达到了490多条。链接如下:
http://www.reddit.com/r/programming/comments/9egb6/programming_is_hard/
有人说,要用try catch;有人说要使用XML配置文件……,程序员们在追逐更为变态和疯狂的东西,并从中找到快乐,呵呵。
看完后,正如reddit.com所说——“编程好难啊”!
无独有偶,这并不是第一次,也不会是最后一次,让我们看看在PHP的官网上发生的类似的一幕——讨论PHP的abs取绝对值函数的函数说明文档中的
回复:
http://us.php.net/manual/en/function.abs.php#58508
又是一个长贴,还带着很多性能分析,真的很好很强大!
(全文完)
Thanks Muchly
--
You received this message because you are subscribed to the Google Groups "通信工程03级" group.
To post to this group, send email to
wearecl...@googlegroups.com.
To unsubscribe from this group, send email to
weareclassmat...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/weareclassmates?hl=en.