博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程真难啊
阅读量:5256 次
发布时间:2019-06-14

本文共 3916 字,大约阅读时间需要 13 分钟。

上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:

LZ的贴子翻译如下:

大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊。比如把-12转成+12。是的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法。非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个正确的方向——比如使用一些数学库或是二进制方法什么的。谢谢!

这个贴子的沙发给出了答案:

 

n = -n;

LZ在四楼回复到:

我知道是个很简单的事,可我没有想到居然这么简单,我觉得你可能是对的。谢谢你。

过了一会,又回复到:

不开玩笑地说,我试了,真的没有问题耶!

看到这样的贴子,就能想到国内论坛上很多这样的“问弱智问题的贴子”,结果可能都会是比较惨!是的,国外的互联网文化和国内差不多,都是恶搞的人多于热心的人,呵呵。不过,国外的网民们有一点是好的,再恶搞也是就事搞事,不会有侮辱人的语言,这点真是值国内的人学习

这本是一个平淡无奇的贴子,不过回复中那些恶搞的“解决方案”太强大了,在这里例举一下吧。

贴子的板凳给出了这样的答案(这是恶搞的开始)

 

1
2
3
4
5
6
7
8
9
10
int
x = numberToInvertSign;
boolean
pos = x >
0
;
for
(
int
i =
0
; i <
2
*Math.abs(x); i++){
    
if
(pos){
       
numberToInvertSign--;
    
}
    
else
{
        
numberToInvertSign++;
    
}
}

然后,有人说,n = -n 可以是可以,但不够晦涩,于是一个晦涩的解决方案出现了:

1
2
int
n = ....;
 
n = (
0xffffffff
^ n) +
1
;

然后,又出现了一些看似简单,其实是比较晦涩的方案

 

1
<code>n = ~n +
1
; </code>

 

 

1
<code><code>n = ~--n; </code></code>

 

继续,有才的人从来就不少:

 

1
2
3
4
5
6
7
<code><code>n^=
0xffffffff
;
int
m;
for
(m=
1
; m !=
0
&& ((n&m) !=
0
); m<<=
1
);
n|= m;
if
(m ==
0
) n= m;
else
for
(m >>=
1
; m !=
0
; n^= m, m>>=
1
);
</code></code>

 

呵呵,开始越来越强大了,我以前也向大家介绍过《》的文章,和这些恶搞的人可能有点相似吧。上面这个例子一出,大家都在讨论上面例子中的for循环语句,呵呵,很费解啊。

然后,后面几个就开始乱来了:

1
2
3
public
int
invert(
int
i) {
  
return
i - (i + i);
}
1
2
3
4
5
6
7
switch
(i)
{
  
case
1
:
return
-
1
;
  
case
2
:
return
-
2
;
  
case
3
:
return
-
3
;
  
// ... etc, you get the proper pattern
}

不过事情还没有结束,看看下面这个吧,OMG。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int
absoluteValue(
int
num)
{
 
int
max =
0
;
 
for
(
int
i =
0
;
true
; ++i)
 
{
  
max = i > max ? i : max;
  
if
(i == num)
  
{
   
if
(i >= max)
    
return
i;
   
return
-i;
  
}
 
}
}

 还有用字符串的解决方案:

1
2
3
4
5
6
7
8
9
10
11
public
int
invert(
int
n) {
    
String nStr = String.valueOf(n);
  
    
if
(nStr.startsWith(
"-"
)) {
        
nStr = nStr.replace(
"-"
,
""
);
    
}
else
{
        
nStr =
"-"
+ nStr;
    
}
  
    
return
Integer.parseInt(nStr);
}

别忘了面象对象,有最新Java支持的模板库: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public
interface
Negatable<T
extends
Number> {
  
T value();
  
T negate();
}
  
  
  
public
abstract
class
NegatableInteger
implements
Negatable<Integer> {
  
private
final
int
value;
  
  
protected
NegatableInteger(
int
value) {
    
this
.value = value;
  
}
  
  
public
static
NegatableInteger createNegatableInteger(
int
value) {
    
if
(value >
0
) {
      
return
new
NegatablePositiveInteger(value);
    
}
    
else
if
(value == Integer.MIN_VALUE) {
      
throw
new
IllegalArgumentException(
"cannot negate "
+ value);
    
}
    
else
if
(value <
0
) {
      
return
new
NegatableNegativeInteger(value);
    
}
    
else
{
      
return
new
NegatableZeroInteger(value);
    
}
  
}
  
  
public
Integer value() {
    
return
value;
  
}
  
  
public
Integer negate() {
    
String negatedString = negateValueAsString ();
    
Integer negatedInteger = Integer.parseInt(negatedString);
    
return
negatedInteger;
  
}
  
  
protected
abstract
String negateValueAsString ();
}
  
  
  
public
class
NegatablePositiveInteger
extends
NegatableInteger {
  
public
NegatablePositiveInteger(
int
value) {
    
super
(value);
  
}
  
  
protected
String negateValueAsString () {
    
String valueAsString = String.valueOf (value());
    
return
"-"
+ valueAsString;
  
}
}
  
  
  
public
class
NegatableNegativeInteger
extends
NegatableInteger {
  
public
NegatableNegativeInteger (
int
value) {
    
super
(value);
  
}
  
  
protected
String negateValueAsString () {
    
String valueAsString = String.valueOf (value());
    
return
valueAsString.substring(
1
);
  
}
}
  
  
  
public
class
NegatableZeroInteger
extends
NegatableInteger {
  
public
NegatableZeroInteger (
int
value) {
    
super
(value);
  
}
  
  
protected
String negateValueAsString () {
    
return
String.valueOf (value());
  
}
}

 

这个贴子基本上就是两页,好像不算太严重,如果你这样想的话,你就大错特错了。这个贴子被人转到了reddit.com,于是一发不可收拾,在上面的回贴达到了490多条。链接如下:

有人说,要用try catch;有人说要使用XML配置文件……,程序员们在追逐更为变态和疯狂的东西,并从中找到快乐,呵呵。

看完后,正如reddit.com所说——“编程好难啊”!

无独有偶,这并不是第一次,也不会是最后一次,让我们看看在PHP的官网上发生的类似的一幕——讨论PHP的abs取绝对值函数的函数说明文档中的回复:

又是一个长贴,还带着很多性能分析,真的很好很强大!

(全文完)

转载于:https://www.cnblogs.com/yymn/p/4647316.html

你可能感兴趣的文章
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
查看>>
latex tree
查看>>
jquery 三级关联选择效果
查看>>
Css 特性之 transition和transform
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
函数调用可视化
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
关于开罗
查看>>
css3学习01
查看>>
二维数组的最大子数组和 时间复杂度:O(n的四次方)
查看>>
故事板 — 视图切换(segue)与传值
查看>>
【USACO】 奶牛会展
查看>>
js对象的创建
查看>>
ActiveMQ笔记之点对点队列(Point-to-Point)
查看>>
继承和多态
查看>>
Dijkstra+计算几何 POJ 2502 Subway
查看>>
二分+DP+Trie HDOJ 5715 XOR 游戏
查看>>
修复IE不能执行JS的方法
查看>>
程序员究竟该如何提高效率zt
查看>>