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

回答編集履歴

2

追記

2021/12/17 10:26

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -23,4 +23,24 @@
23
23
  sc.close();
24
24
  }
25
25
  }
26
+ ```
27
+
28
+ 実例
29
+ ---
30
+ **ダメな例** (2回目以降の呼び出し時にNoSuchElementExceptionを送出する)
31
+ ```Java
32
+ int read() {
33
+ Scanner sc = new Scanner(System.in);
34
+ int ret = sc.nextInt();
35
+ sc.close();
36
+ return ret;
37
+ }
38
+ ```
39
+
40
+ **良い例**
41
+ ```Java
42
+ int read(Scanner sc) {
43
+ int ret = sc.nextInt();
44
+ return ret;
45
+ }
26
46
  ```

1

追記

2021/12/17 10:25

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -3,4 +3,24 @@
3
3
  Scannerインスタンスをmainメソッド側で作って引数で取り廻すか、
4
4
  フィールドとして保持するようにすれば良いでしょう。
5
5
 
6
- その場合、mainメソッド終了前にcloseしてあげて下さい。
6
+ その場合、mainメソッド終了前にcloseしてあげて下さい。
7
+
8
+ エラー再現
9
+ ---
10
+ ```Java
11
+ import java.util.Scanner;
12
+
13
+ class Main {
14
+ public static void main(String[] args) {
15
+ Scanner sc;
16
+
17
+ sc = new Scanner(System.in);
18
+ System.out.println(sc.next()); // ここではちゃんと読める
19
+ sc.close();
20
+
21
+ sc = new Scanner(System.in);
22
+ System.out.println(sc.next()); // エラー!!
23
+ sc.close();
24
+ }
25
+ }
26
+ ```