回答編集履歴

2

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

2021/11/10 05:35

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -20,9 +20,13 @@
20
20
 
21
21
 
22
22
 
23
- //1秒後に標準入力を閉じ
23
+ //1秒後に停止す
24
24
 
25
25
  class Worker extends Thread {
26
+
27
+ private int count = 0;
28
+
29
+ private boolean end = false;
26
30
 
27
31
  public void run() {
28
32
 
@@ -30,19 +34,21 @@
30
34
 
31
35
  Thread.sleep(1000);
32
36
 
33
- System.in.close();
37
+ System.out.println("Enter to End.");
34
38
 
35
39
  } catch (InterruptedException e) {
36
40
 
37
41
  e.printStackTrace();
38
42
 
39
- } catch (IOException e) {
40
-
41
- e.printStackTrace();
42
-
43
43
  }
44
44
 
45
+ end = true;
46
+
45
47
  }
48
+
49
+ void countUp() { if(!end) count ++; }
50
+
51
+ int getCount() { return count; }
46
52
 
47
53
  }
48
54
 
@@ -52,11 +58,9 @@
52
58
 
53
59
  public static void main(String[] args) {
54
60
 
55
- int count = 0;
61
+ Worker worker = new Worker();
56
62
 
57
63
  try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
58
-
59
- Worker worker = new Worker();
60
64
 
61
65
  System.out.print("Enter to Start.");
62
66
 
@@ -66,13 +70,13 @@
66
70
 
67
71
  worker.start();
68
72
 
69
- System.out.print("Hit Enters.");
73
+ System.out.println("Hit Enters.");
70
74
 
71
- while (true) {
75
+ while (worker.isAlive()) {
72
76
 
73
77
  br.readLine();
74
78
 
75
- count ++;
79
+ worker.countUp();
76
80
 
77
81
  }
78
82
 
@@ -80,7 +84,7 @@
80
84
 
81
85
  }
82
86
 
83
- System.out.println("count="+count);
87
+ System.out.println("count="+worker.getCount());
84
88
 
85
89
  }
86
90
 

1

コード追加

2021/11/10 05:35

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1 +1,89 @@
1
1
  「1秒間でエンターキーを押した数を表示」であれば、別スレッドは 1 秒後に表示する 1 つだけで済むはずです。
2
+
3
+
4
+
5
+ ----
6
+
7
+
8
+
9
+ 上で別スレッドで表示としましたが、分かり難いかもしれませんのでメインスレッドで表示するものにしました。
10
+
11
+
12
+
13
+ ```java
14
+
15
+ package teratail_java.q367984;
16
+
17
+
18
+
19
+ import java.io.*;
20
+
21
+
22
+
23
+ //1秒後に標準入力を閉じる
24
+
25
+ class Worker extends Thread {
26
+
27
+ public void run() {
28
+
29
+ try {
30
+
31
+ Thread.sleep(1000);
32
+
33
+ System.in.close();
34
+
35
+ } catch (InterruptedException e) {
36
+
37
+ e.printStackTrace();
38
+
39
+ } catch (IOException e) {
40
+
41
+ e.printStackTrace();
42
+
43
+ }
44
+
45
+ }
46
+
47
+ }
48
+
49
+
50
+
51
+ class Sample {
52
+
53
+ public static void main(String[] args) {
54
+
55
+ int count = 0;
56
+
57
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
58
+
59
+ Worker worker = new Worker();
60
+
61
+ System.out.print("Enter to Start.");
62
+
63
+ br.readLine();
64
+
65
+
66
+
67
+ worker.start();
68
+
69
+ System.out.print("Hit Enters.");
70
+
71
+ while (true) {
72
+
73
+ br.readLine();
74
+
75
+ count ++;
76
+
77
+ }
78
+
79
+ } catch (IOException ignore) {
80
+
81
+ }
82
+
83
+ System.out.println("count="+count);
84
+
85
+ }
86
+
87
+ }
88
+
89
+ ```