diff --git a/docs/exPuzzlers/.idea/.name b/docs/exPuzzlers/.idea/.name new file mode 100644 index 00000000000..140eaf3b823 --- /dev/null +++ b/docs/exPuzzlers/.idea/.name @@ -0,0 +1 @@ +exPuzzlers \ No newline at end of file diff --git a/docs/exPuzzlers/.idea/ant.xml b/docs/exPuzzlers/.idea/ant.xml new file mode 100644 index 00000000000..2581ca3fe84 --- /dev/null +++ b/docs/exPuzzlers/.idea/ant.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/exPuzzlers/.idea/compiler.xml b/docs/exPuzzlers/.idea/compiler.xml new file mode 100644 index 00000000000..a1b41c52c72 --- /dev/null +++ b/docs/exPuzzlers/.idea/compiler.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/docs/exPuzzlers/.idea/copyright/profiles_settings.xml b/docs/exPuzzlers/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000000..3572571ad83 --- /dev/null +++ b/docs/exPuzzlers/.idea/copyright/profiles_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/docs/exPuzzlers/.idea/encodings.xml b/docs/exPuzzlers/.idea/encodings.xml new file mode 100644 index 00000000000..e206d70d859 --- /dev/null +++ b/docs/exPuzzlers/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/exPuzzlers/.idea/misc.xml b/docs/exPuzzlers/.idea/misc.xml new file mode 100644 index 00000000000..41321dce6d5 --- /dev/null +++ b/docs/exPuzzlers/.idea/misc.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + http://www.w3.org/1999/xhtml + + + + + + + + diff --git a/docs/exPuzzlers/.idea/modules.xml b/docs/exPuzzlers/.idea/modules.xml new file mode 100644 index 00000000000..1233f39cda9 --- /dev/null +++ b/docs/exPuzzlers/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/exPuzzlers/.idea/scopes/scope_settings.xml b/docs/exPuzzlers/.idea/scopes/scope_settings.xml new file mode 100644 index 00000000000..922003b8433 --- /dev/null +++ b/docs/exPuzzlers/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/docs/exPuzzlers/.idea/uiDesigner.xml b/docs/exPuzzlers/.idea/uiDesigner.xml new file mode 100644 index 00000000000..3b000203088 --- /dev/null +++ b/docs/exPuzzlers/.idea/uiDesigner.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/exPuzzlers/.idea/vcs.xml b/docs/exPuzzlers/.idea/vcs.xml new file mode 100644 index 00000000000..def6a6a1845 --- /dev/null +++ b/docs/exPuzzlers/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/exPuzzlers/.idea/workspace.xml b/docs/exPuzzlers/.idea/workspace.xml new file mode 100644 index 00000000000..2fe1fe3b5e5 --- /dev/null +++ b/docs/exPuzzlers/.idea/workspace.xml @@ -0,0 +1,953 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + 1321010637439 + 1321010637439 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + annotations + + + + + + + + IDEA 10.x + + + + + + + + exPuzzlers + + + + + + + + 1.6 + + + + + + + + + + + + + + + + diff --git a/docs/exPuzzlers/exPuzzlers.iml b/docs/exPuzzlers/exPuzzlers.iml new file mode 100644 index 00000000000..e0dc2c45a79 --- /dev/null +++ b/docs/exPuzzlers/exPuzzlers.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/exPuzzlers/kotlin/std.kt b/docs/exPuzzlers/kotlin/std.kt new file mode 100644 index 00000000000..3ea1a381dac --- /dev/null +++ b/docs/exPuzzlers/kotlin/std.kt @@ -0,0 +1,49 @@ +namespace std + +fun array(vararg array : T) = array +fun array(vararg array : Byte) = array +fun array(vararg array : Char) = array +fun array(vararg array : Short) = array +fun array(vararg array : Int) = array +fun array(vararg array : Long) = array +fun array(vararg array : Double) = array +fun array(vararg array : Float) = array + +fun Any?.identityEquals(other : Any?) = this === other + +namespace io { + import java.io.* + + fun print(message : Any?) { System.out?.print(message) } + fun print(message : Int) { System.out?.print(message) } + fun print(message : Long) { System.out?.print(message) } + fun print(message : Byte) { System.out?.print(message) } + fun print(message : Short) { System.out?.print(message) } + fun print(message : Char) { System.out?.print(message) } + fun print(message : Boolean) { System.out?.print(message) } + fun print(message : Float) { System.out?.print(message) } + fun print(message : Double) { System.out?.print(message) } + fun print(message : CharArray) { System.out?.print(message) } + + fun println(message : Any?) { System.out?.println(message) } + fun println(message : Int) { System.out?.println(message) } + fun println(message : Long) { System.out?.println(message) } + fun println(message : Byte) { System.out?.println(message) } + fun println(message : Short) { System.out?.println(message) } + fun println(message : Char) { System.out?.println(message) } + fun println(message : Boolean) { System.out?.println(message) } + fun println(message : Float) { System.out?.println(message) } + fun println(message : Double) { System.out?.println(message) } + fun println(message : CharArray) { System.out?.println(message) } + + private var systemIn : InputStream? = null // Unfortunately, System.in may change + private var stdin : BufferedReader? = null // This may introduce leaks of system.in objects... + + fun readLine() : String? { + if (stdin == null || systemIn != System.`in`) { + stdin = java.io.BufferedReader(java.io.InputStreamReader(System.`in`)) + systemIn = System.`in` + } + return stdin?.readLine() + } +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_02_expressive/_01_Oddity/Oddity.java b/docs/exPuzzlers/src/_02_expressive/_01_Oddity/Oddity.java new file mode 100644 index 00000000000..e18ac4118ca --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_01_Oddity/Oddity.java @@ -0,0 +1,14 @@ +package _02_expressive._01_Oddity; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 5). Pearson Education (USA). Kindle Edition. + */ +public class Oddity { + public static boolean isOdd(int i) { + return i % 2 == 1; + } + + public static void main(String[] args) { + System.out.println(isOdd(-1)); + } +} diff --git a/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/BigDecimalSolution.kt b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/BigDecimalSolution.kt new file mode 100644 index 00000000000..008841a00cf --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/BigDecimalSolution.kt @@ -0,0 +1,19 @@ +namespace change + +import java.math.BigDecimal +import std.io.* + +fun main(args : Array) { + // Easy to make BigDecimals user-friendly + println( + "2.00".bd - "1.00" + ) +} + +val String.bd = BigDecimal(this) + +fun BigDecimal.minus(other : BigDecimal) = this.subtract(other) +fun BigDecimal.minus(other : String) = subtract(other.bd) // this can be omitted + + + diff --git a/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/Change.java b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/Change.java new file mode 100644 index 00000000000..882e193fbf9 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/Change.java @@ -0,0 +1,11 @@ +package _02_expressive._02_Time_for_a_Change; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 7). Pearson Education (USA). Kindle Edition. + */ +public class Change { + public static void main(String args[ ] ) { + System.out.println(2.00 - 1.10); + } +} + diff --git a/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/ChangeSolutions.java b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/ChangeSolutions.java new file mode 100644 index 00000000000..be1736a2d9f --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_02_Time_for_a_Change/ChangeSolutions.java @@ -0,0 +1,20 @@ +package _02_expressive._02_Time_for_a_Change; + +import java.math.BigDecimal; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 7). Pearson Education (USA). Kindle Edition. + */ +public class ChangeSolutions { + public static void main(String args[ ] ) { + // Poor solution - still uses binary floating-point! + System.out.printf("%.2f%n", 2.00 - 1.10); + + // Calculation in cents + System.out.println((200 - 110) + " cents"); + + // BigDecimal + System.out.println(new BigDecimal("2.00"). subtract(new BigDecimal("1.10"))); + } +} + diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.java b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.java new file mode 100644 index 00000000000..e4de049aba5 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.java @@ -0,0 +1,12 @@ +package _02_expressive._03_Long_Division; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 9). Pearson Education (USA). Kindle Edition. + */ +public class LongDivision { + public static void main(String[] args) { + final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; + final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; + System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY); + } +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.kt b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.kt new file mode 100644 index 00000000000..b1eaeda45e2 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivision.kt @@ -0,0 +1,15 @@ +namespace long.division + +import std.io.* + +fun main(args : Array) { + // Problematic case does not compile +// val MICROS_PER_DAY_ : Long = 24 * 60 * 60 * 1000 * 1000; +// val MILLIS_PER_DAY_ : Long = 24 * 60 * 60 * 1000 + + // Solution: + val MICROS_PER_DAY : Long = 24.lng * 60 * 60 * 1000 * 1000; + val MILLIS_PER_DAY : Long = 24.lng * 60 * 60 * 1000 + + println(MICROS_PER_DAY / MILLIS_PER_DAY) +} diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.java b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.java new file mode 100644 index 00000000000..24c8083f863 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.java @@ -0,0 +1,12 @@ +package _02_expressive._03_Long_Division; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 9). Pearson Education (USA). Kindle Edition. + */ +public class LongDivisionSolution { + public static void main(String[] args) { + final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000; + final long MILLIS_PER_DAY = 24L * 60 * 60 * 1000; + System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY); + } +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.kt b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.kt new file mode 100644 index 00000000000..ae7c2538e0e --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_03_Long_Division/LongDivisionSolution.kt @@ -0,0 +1,10 @@ +namespace long.division.solution + +import std.io.* + +fun main(args : Array) { + val MICROS_PER_DAY : Long = 24.lng * 60 * 60 * 1000 * 1000; + val MILLIS_PER_DAY : Long = 24.lng * 60 * 60 * 1000 + + println(MICROS_PER_DAY / MILLIS_PER_DAY) +} diff --git a/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.java b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.java new file mode 100644 index 00000000000..f81edefb51c --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.java @@ -0,0 +1,11 @@ +package _02_expressive._04_Elementary; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 11). Pearson Education (USA). Kindle Edition. + */ +public class Elementary { + public static void main(String[] args) { + System.out.println(12345 + 5432l); + } +} + diff --git a/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.kt b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.kt new file mode 100644 index 00000000000..60113574771 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/Elementary.kt @@ -0,0 +1,11 @@ +namespace elementary + +import std.io.* + +fun main(args : Array) { + // Problematic case does not compile +// println(12345 + 5432l) + + // Correct syntax: + println(12345 + 5432.lng) +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_02_expressive/_04_Elementary/ElementarySolution.java b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/ElementarySolution.java new file mode 100644 index 00000000000..e1bc9464414 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_04_Elementary/ElementarySolution.java @@ -0,0 +1,11 @@ +package _02_expressive._04_Elementary; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 11). Pearson Education (USA). Kindle Edition. + */ +public class ElementarySolution { + public static void main(String[] args) { + System.out.println(12345 + 5432L); + } +} + diff --git a/docs/exPuzzlers/src/_02_expressive/_05_The_Joy_of_Hex/JoyOfHex.java b/docs/exPuzzlers/src/_02_expressive/_05_The_Joy_of_Hex/JoyOfHex.java new file mode 100644 index 00000000000..93fbb99ee62 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_05_The_Joy_of_Hex/JoyOfHex.java @@ -0,0 +1,11 @@ +package _02_expressive._05_The_Joy_of_Hex; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 13). Pearson Education (USA). Kindle Edition. + */ +public class JoyOfHex { + public static void main(String[] args) { + System.out.println(Long.toHexString(0x100000000L + 0xcafebabe)); + } +} + diff --git a/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Multicast.kt b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Multicast.kt new file mode 100644 index 00000000000..c58ec8c6b18 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Multicast.kt @@ -0,0 +1,8 @@ +namespace multicast + +import std.io.* + +fun main(args : Array) { + println(-1.byt.chr.int) + println((-1).byt.chr.int) +} diff --git a/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Mutlicast.java b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Mutlicast.java new file mode 100644 index 00000000000..5fd49b5f325 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_06_Multicast/Mutlicast.java @@ -0,0 +1,11 @@ +package _02_expressive._06_Multicast; + +/** + * @author abreslav + */ +public class Mutlicast { + public static void main(String[] args) { + System.out.println((int) (char) (byte) -1); + } +} + diff --git a/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.java b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.java new file mode 100644 index 00000000000..874747f3a3a --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.java @@ -0,0 +1,16 @@ +package _02_expressive._07_Swap_Meat; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 17). Pearson Education (USA). Kindle Edition. + */ +public class CleverSwap { + public static void main(String[] args) { + int x = 1984; // (0x7c0) + int y = 2001; // (0x7d1) + x ^= y ^= x ^= y; + System.out.println("x = " + x + "; y = " + y); + + // Solution: swap with a temp variable + // Do not assign to the same variable more than once in a single expression. + } +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.kt b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.kt new file mode 100644 index 00000000000..68debbabd4b --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_07_Swap_Meat/CleverSwap.kt @@ -0,0 +1,10 @@ +namespace cleverswap + +import std.io.* + +fun main(args : Array) { + var x = 1 + // Do not assign to the same variable more than once in a single expression. + // Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 19). Pearson Education (USA). Kindle Edition. +// x += (y += z) +} diff --git a/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.java b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.java new file mode 100644 index 00000000000..06ebbce669e --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.java @@ -0,0 +1,13 @@ +package _02_expressive._08_Dos_Equis; + +/** + * @author abreslav + */ +public class DosEquis { + public static void main(String[] args) { + char x = 'X'; + int i = 0; + System.out.print(true ? x : 0); + System.out.print(false ? i : x); + } +} diff --git a/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.kt b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.kt new file mode 100644 index 00000000000..1231cb2b1af --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_08_Dos_Equis/DosEquis.kt @@ -0,0 +1,15 @@ +namespace dos.equis + +import std.io.* + +fun main(args : Array) { + // Problematic case does not compile + val x = 'X' + val i = 0 + print(if (true) x else 0) + print(if (false) 0 else x) + + // Mixed computations do not compile: +// val int : Int = if (true) x else 0 +// val char : Char = if (false) 0 else x +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_02_expressive/_09_Tweedledum/Tweedledum.java b/docs/exPuzzlers/src/_02_expressive/_09_Tweedledum/Tweedledum.java new file mode 100644 index 00000000000..cceb3cb3e1a --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_09_Tweedledum/Tweedledum.java @@ -0,0 +1,13 @@ +package _02_expressive._09_Tweedledum; + +/** + * @author abreslav + */ +public class Tweedledum { + public static void main(String[] args) { + byte x = 1; + byte i = 1; + x += i; +// x = x + i; + } +} diff --git a/docs/exPuzzlers/src/_02_expressive/_10_Tweedledee/Tweedledee.java b/docs/exPuzzlers/src/_02_expressive/_10_Tweedledee/Tweedledee.java new file mode 100644 index 00000000000..61758e70835 --- /dev/null +++ b/docs/exPuzzlers/src/_02_expressive/_10_Tweedledee/Tweedledee.java @@ -0,0 +1,13 @@ +package _02_expressive._10_Tweedledee; + +/** + * @author abreslav + */ +public class Tweedledee { + public static void main(String[] args) { + Object x = 1; + String i = "1"; +// x += i; + x = x + i; + } +} diff --git a/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.java b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.java new file mode 100644 index 00000000000..da25b2ad75b --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.java @@ -0,0 +1,12 @@ +package _03_character._11_The_Last_Laugh; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 25). Pearson Education (USA). Kindle Edition. + */ +public class LastLaugh { + public static void main(String args[]) { + System.out.print("H" + "a"); + System.out.print('H' + 'a'); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.kt b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.kt new file mode 100644 index 00000000000..3f4b33b5431 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_11_The_Last_Laugh/LastLaugh.kt @@ -0,0 +1,12 @@ +namespace last.laugh + +import std.io.* + +fun main(args : Array) { + print("H" + "a") + // Problematic case does not compile +// System.out?.print('H' + 'a') + + // Solution + print('H'.toString() + 'a') +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_03_character/_12_ABC/Abc.java b/docs/exPuzzlers/src/_03_character/_12_ABC/Abc.java new file mode 100644 index 00000000000..5eef04a52f9 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_12_ABC/Abc.java @@ -0,0 +1,19 @@ +package _03_character._12_ABC; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 27). Pearson Education (USA). Kindle Edition. + */ +public class Abc { + public static void main(String[] args) { + String letters = "ABC"; + char[] numbers = {'1', '2', '3'}; + System.out.println(letters + " easy as " + numbers); + + // Solution: + System.out.println(letters + " easy as "); + System.out.println(numbers); + // or + System.out.println(letters + " easy as " + String.valueOf(numbers)); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.java b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.java new file mode 100644 index 00000000000..d7c19aeecf5 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.java @@ -0,0 +1,18 @@ +package _03_character._13_Animal_Farm; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 29). Pearson Education (USA). Kindle Edition. + */ +public class AnimalFarm { + public static void main(String[] args) { + final String pig = "length: 10"; + final String dog = "length: " + pig.length(); + System.out.println("Animals are equal: " + pig == dog); + + // Solution: + System.out.println("Animals are equal: " + pig.equals(dog)); + // or + System.out.println("Animals are equal: " + (pig.intern() == dog.intern())); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt new file mode 100644 index 00000000000..fe0c51d44a9 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_13_Animal_Farm/AnimalFarm.kt @@ -0,0 +1,16 @@ +namespace animal.farm + +import std.io.* +import std.* + +fun main(args : Array) { + val pig = "length: 10"; + val dog = "length: " + pig.length; + println("Animals are equal: " + pig == dog); + + // Solution: + println("Animals are equal: " + (pig == dog)); + + // Note: + println("Animals are equal: " + (pig identityEquals dog)); +} \ No newline at end of file