4. Java Puzzlers のルール
public class JavaPuzzlers {
public static void main(String... args) {
System.out.println(“Japan Java User
Group Presents!”);
}
}
1.Japan Java User Group Presents!
2.Java Puzzlers
3.0xCAFEBABE
4.その他
6. 問題1:They Live
public class TheyLive {
public static void main(String... args) {
int sum = 0;
for (int i = Integer.MIN_VALUE;
i < Integer.MAX_VALUE; i++) {
if (i != 0) sum += i / Math.abs(i);
}
System.out.println(sum);
}
}
7. 選択肢1:They Live
選択肢
1. -1
2. 0
3. 1
4. その他
public class TheyLive {
public static void main(String... args) {
int sum = 0;
for (int i = Integer.MIN_VALUE;
i < Integer.MAX_VALUE; i++) {
if (i != 0) sum += i / Math.abs(i);
}
System.out.println(sum);
}
}
9. 解答1:They Live
選択肢
1. -1
2. 0
3. 1
4. その他
public class TheyLive {
public static void main(String... args) {
int sum = 0;
for (int i = Integer.MIN_VALUE;
i < Integer.MAX_VALUE; i++) {
if (i != 0) sum += i / Math.abs(i);
}
System.out.println(sum);
}
}
12. 解決1:どうやって直すのか
public class TheyLive {
public static void main(String... args) {
int sum = -1;
for (int i = Integer.MIN_VALUE+1;
i < Integer.MAX_VALUE; i++) {
if (i != 0) sum += i / Math.abs(i);
}
System.out.println(sum);
}
}
15. 問題2:MarshmallowMan
public class MarshmallowMan{
public static void main(String... args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += foo(i);
}
System.out.println(sum);
}
public static long foo(long l) {return l;}}
16. 選択肢2:MarshmallowMan
public class MarshmallowMan {
public static void main(String... args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += foo(i);
}
System.out.println(sum);
}
public static long foo(long l) {return l;}}
選択肢
1. 0
2. 45
3. 55
4. コンパイルエラー
18. 選択肢2:MarshmallowMan
public class Sum {
public static void main(String... args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += foo(i);
}
System.out.println(sum);
}
public static long foo(long l) {return l;}}
選択肢
1. 0
2. 45
3. 55
4. コンパイルエラー
19. 解説2:
sum = sum + data コンパイルエラー
sum += data コンパイルエラーにはならない
int sum = 0;
long data = 10;
System.out.println(sum += data);
この問題と同じ
20. 解説2:
JLS §15.26.2. Compound Assignment Operators
E1 op= E2
E1 = (T) ((E1) op (E2)) ※ T は E1 の型
つまり
sum = (int) (sum + data)
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2
41. 問題5:The Fog
class Ship<T> {
private T t;
public Ship(T t) { this.t = t; }
public void setCrew(T t) { this.t = t; }
public int hashCode() { return Objects.hashCode(t); }
}
public class TheFog {
public static void main(String... args) {
Map<Ship<String>, String> map = new HashMap<>();
Ship<String> a = new Ship<>("A");
Ship<String> b = new Ship<>("B");
map.put(a, "a"); a.setCrew("B");
map.put(b, "b");
System.out.println(map.values().size());
}}
42. 選択肢5:The Fog
class Ship<T> {
private T t;
public Ship(T t) { this.t = t; }
public void setCrew(T t) { this.t = t; }
public int hashCode() { return Objects.hashCode(t); }
}
public class TheFog {
public static void main(String... args) {
Map<Ship<String>, String> map = new HashMap<>();
Ship<String> a = new Ship<>("A");
Ship<String> b = new Ship<>("B");
map.put(a, "a"); a.setCrew("B");
map.put(b, "b");
System.out.println(map.values().size());
}}
選択肢
1. 0
2. 1
3. 2
4. Exception