[WTF ] 2 + 2 = 5

作者: AmosYang (泛用人型編碼器)   2014-06-03 03:54:51
在 Hacker News 上看到這個討論串
https://news.ycombinator.com/item?id=7828757
題目很簡單: 寫個程式「看起來」是在計算 2+2 但最後輸出 "2+2" 的答案為 5
"2 + 2 = 5" 這個梗來自於 George Orwell 所著 1984 這本小說
以下程式碼節選自網友參賽作品
============================================================
By http://codegolf.stackexchange.com/users/17249/durron597
============================================================
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws Exception {
Class cache = Integer.class.getDeclaredClasses()[0];
Field c = cache.getDeclaredField("cache");
c.setAccessible(true);
Integer[] array = (Integer[]) c.get(cache);
array[132] = array[133];
System.out.printf("%d",2 + 2);
}
}
============================================================
============================================================
By http://codegolf.stackexchange.com/users/17249/durron597
============================================================
public class TwoPlusTwo {
public static void main(String... args) {
double two = two();
System.out.format("Variable two = %.15f%n", two);
double four = Math.ceil(two + two); // round just in case
System.out.format("two + two = %.15f%n", four);
}
// 20 * .1 = 2
private static double two() {
double two = 0;
for(int i = 0; i < 20; i++) {
two += .1;
}
return two;
}
}
============================================================
============================================================
Originally written in C# by http://codegolf.stackexchange.com/users/20329/grax
============================================================
public class HelloWorld{
public static void main(String []args){
int x = 2;
int y = 2;
if (false);
{
++x;
}
System.out.println(x+y);
}
}
============================================================
============================================================
By http://codegolf.stackexchange.com/users/7416/aditsu
============================================================
public class Five {
public static void main(final String... args) {
System.out.println(256.0000000000002 + 256.0000000000002);
}
}
============================================================
同場加映,猜猜看以下這個程式的 output
============================================================
By https://news.ycombinator.com/user?id=kyrra
============================================================
public class A {
public static void main(String[] args) {
Integer a = 100, b = 100;
Integer c = 10000, d = 10000;
System.out.println(a == b);
System.out.println(c == d);
}
}
============================================================
該把 "Can understand Java code" 這行從我的履歷表上拿掉了… :D
作者: lovdkkkk (dk)   2014-06-03 04:10:00
同場加映那個良葛格有寫耶 http://ppt.cc/bPqM
作者: JustinHere (良葛格)   2014-06-03 06:43:00
我的那篇有新版的文件 http://tinyurl.com/pvkgfhm
作者: sbrhsieh (十年一夢)   2014-06-03 09:49:00
作法一可行也是因為5落在有cache範圍內
作者: Killercat (殺人貓™)   2014-06-03 09:52:00
同場加映那個 其實算是FAQ等級的陷阱了 XD
作者: sbrhsieh (十年一夢)   2014-06-03 10:12:00
我打錯了,是4
作者: darkk6 (Mr. Pan)   2014-06-03 10:48:00
不過同理,可以擴增IntegerCache的範圍,要多少都不是問題
作者: Killercat (殺人貓™)   2014-06-03 10:52:00
auto boxing其實最容易出包的地方是method =P
作者: sbrhsieh (十年一夢)   2014-06-03 11:50:00
不懂darkk6 的意思若我沒誤解,那你有能力變更 final field 的值。要這個 property 應該也是 implementation specific?

Links booklink

Contact Us: admin [ a t ] ucptt.com