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

回答編集履歴

2

ENTER を一度も入力しなくてもソレっぽく動作するように修正

2021/11/10 05:35

投稿

jimbe
jimbe

スコア13357

answer CHANGED
@@ -9,37 +9,39 @@
9
9
 
10
10
  import java.io.*;
11
11
 
12
- //1秒後に標準入力を閉じ
12
+ //1秒後に停止す
13
13
  class Worker extends Thread {
14
+ private int count = 0;
15
+ private boolean end = false;
14
16
  public void run() {
15
17
  try {
16
18
  Thread.sleep(1000);
17
- System.in.close();
19
+ System.out.println("Enter to End.");
18
20
  } catch (InterruptedException e) {
19
21
  e.printStackTrace();
20
- } catch (IOException e) {
21
- e.printStackTrace();
22
22
  }
23
+ end = true;
23
24
  }
25
+ void countUp() { if(!end) count ++; }
26
+ int getCount() { return count; }
24
27
  }
25
28
 
26
29
  class Sample {
27
30
  public static void main(String[] args) {
28
- int count = 0;
31
+ Worker worker = new Worker();
29
32
  try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
30
- Worker worker = new Worker();
31
33
  System.out.print("Enter to Start.");
32
34
  br.readLine();
33
35
 
34
36
  worker.start();
35
- System.out.print("Hit Enters.");
37
+ System.out.println("Hit Enters.");
36
- while (true) {
38
+ while (worker.isAlive()) {
37
39
  br.readLine();
38
- count ++;
40
+ worker.countUp();
39
41
  }
40
42
  } catch (IOException ignore) {
41
43
  }
42
- System.out.println("count="+count);
44
+ System.out.println("count="+worker.getCount());
43
45
  }
44
46
  }
45
47
  ```

1

コード追加

2021/11/10 05:35

投稿

jimbe
jimbe

スコア13357

answer CHANGED
@@ -1,1 +1,45 @@
1
- 「1秒間でエンターキーを押した数を表示」であれば、別スレッドは 1 秒後に表示する 1 つだけで済むはずです。
1
+ 「1秒間でエンターキーを押した数を表示」であれば、別スレッドは 1 秒後に表示する 1 つだけで済むはずです。
2
+
3
+ ----
4
+
5
+ 上で別スレッドで表示としましたが、分かり難いかもしれませんのでメインスレッドで表示するものにしました。
6
+
7
+ ```java
8
+ package teratail_java.q367984;
9
+
10
+ import java.io.*;
11
+
12
+ //1秒後に標準入力を閉じる
13
+ class Worker extends Thread {
14
+ public void run() {
15
+ try {
16
+ Thread.sleep(1000);
17
+ System.in.close();
18
+ } catch (InterruptedException e) {
19
+ e.printStackTrace();
20
+ } catch (IOException e) {
21
+ e.printStackTrace();
22
+ }
23
+ }
24
+ }
25
+
26
+ class Sample {
27
+ public static void main(String[] args) {
28
+ int count = 0;
29
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
30
+ Worker worker = new Worker();
31
+ System.out.print("Enter to Start.");
32
+ br.readLine();
33
+
34
+ worker.start();
35
+ System.out.print("Hit Enters.");
36
+ while (true) {
37
+ br.readLine();
38
+ count ++;
39
+ }
40
+ } catch (IOException ignore) {
41
+ }
42
+ System.out.println("count="+count);
43
+ }
44
+ }
45
+ ```