質問するログイン新規登録

回答編集履歴

1

おまけ

2018/05/19 09:24

投稿

KSwordOfHaste
KSwordOfHaste

スコア18406

answer CHANGED
@@ -8,4 +8,53 @@
8
8
 
9
9
  プログラムの中ではScannerは一度だけ生成し、それをずっと使い続けてください。closeをする適切なタイミングはアプリケーションを終了するときです。
10
10
 
11
- countメソッドの中でScannerインスタンスが必要なのでcountメソッドの引数として渡すかフィールドに覚えておくかしなければなりません。
11
+ countメソッドの中でScannerインスタンスが必要なのでcountメソッドの引数として渡すかフィールドに覚えておくかしなければなりません。
12
+
13
+ ---
14
+ 追記:
15
+ staticメソッドを極力使わず、各クラスの各メソッドの引数に一々Scannerなどの情報を渡さずに済ます骨組みみたいなものを書いてみました。(単なる一例です)
16
+
17
+ ```java
18
+ class RPG {
19
+ public static void main(String[] args) {
20
+ try (sc = new Scanner(System.in)) {
21
+ RPG rpg = new RPG();
22
+ rpg.sc = sc;
23
+ rpg.run();
24
+ }
25
+ }
26
+
27
+ Scanner sc;
28
+ Hero hero;
29
+
30
+ void run() {
31
+ hero = new Hero(this, "勇者サトゥー");
32
+ for (;;) {
33
+ ...
34
+ // スライム出たー
35
+ encounter();
36
+ hero.encounter();
37
+ }
38
+ }
39
+
40
+ static void encounter() {
41
+ int decision = sc.nextInt(); // こうすればScannerにアクセスできる
42
+ ...
43
+ }
44
+ }
45
+
46
+ class Hero {
47
+ RPG rpg;
48
+ String name;
49
+
50
+ Hero(RPG rpg, String name) {
51
+ this.rpg = rpg;
52
+ this.name = name;
53
+ }
54
+
55
+ void encounter() {
56
+ int decision = rpg.sc.nextInt(); // こうすればScannerにアクセスできる
57
+ }
58
+ }
59
+ ```
60
+ 必要なインスタンス(RPGインスタンスやHeroインスタンス)の繋がりをフィールドに覚えておくとそのフィールドを通じて必要なインスタンスの必要な情報に全て手が伸ばせるという感じです。