質問編集履歴

3

試したことを追記しました。

2020/04/05 00:40

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -178,8 +178,18 @@
178
178
 
179
179
  ### 試したこと
180
180
 
181
- while (!(str = br.readLine()).isEmpty()){
181
+ while (true) {
182
182
 
183
- をWhile((str = br.readLine())!= null){
183
+ str = br.readLine();
184
184
 
185
+ if (str == null || str.isEmpty()) break;
186
+
185
- してみましたがダメでした
187
+ すると、今度は複数の値を読れません
188
+
189
+
190
+
191
+ while ((str = br.readLine()) != null && !str.isEmpty());
192
+
193
+
194
+
195
+ ⇒こっちは、aを入れても例外処理されないし、ctr+Z押して終了させると、やはりNullPointerExceptionが発生しますね

2

追記しました。

2020/04/05 00:40

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,43 @@
16
16
 
17
17
  ※入力はscannar以外を使用して必ずIOExceptionを発生させる
18
18
 
19
+ <仕様>
19
20
 
21
+ ・数値以外が入力された場合は、「数値を入力してください」を表示する
22
+
23
+ ・入出力例外が発生した場合は、「入出力例外が発生しました」を表示して、処理を終了する
24
+
25
+ ・改行のみが入力された時点で入力を終了する
26
+
27
+ ・演算の結果として、「入力された値の積 :(演算結果)」を表示する
28
+
29
+ ・積算は「*」オペレータを使用し、double型の精度まで表示する
30
+
31
+ ・演算結果は、3桁カンマ編集して表示する
32
+
33
+ ・入力が1つもない場合の演算結果は「1」とする
34
+
35
+
36
+
37
+ ■ 出力例
38
+
39
+ 積を求める数値を入力してください
40
+
41
+ 13
42
+
43
+ 9.3
44
+
45
+ a
46
+
47
+ 数値を入力してください
48
+
49
+ 32
50
+
51
+ 6.7
52
+
53
+
54
+
55
+ 入力された値の積 : 25,920.96
20
56
 
21
57
  ### 該当のソースコード
22
58
 
@@ -26,19 +62,103 @@
26
62
 
27
63
 
28
64
 
65
+ import java.io.*;
66
+
67
+
68
+
69
+ public class Exercise3 {
70
+
71
+
72
+
29
73
  public static void main(String[] args) {
30
74
 
75
+ // TODO Auto-generated method stub
76
+
77
+ int x;
78
+
31
- System.out.println("積を求める数値を入力してくだ");
79
+ System.out.println("入力された値の積 ::");
80
+
81
+ //keyboard inputs
82
+
83
+ InputStreamReader isr = new InputStreamReader(System.in);
84
+
85
+ BufferedReader br = new BufferedReader(isr);
86
+
87
+
88
+
89
+
32
90
 
33
91
  try {
34
92
 
35
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//入力
93
+ String buf;
36
94
 
37
- double product = 1;//initial value
95
+ while(true) {
38
96
 
39
- String str;
97
+ buf = br.readLine();//Arise an IOException intentionally
40
98
 
99
+ if(buf.contentEquals("\n"))//if the value is the only new line , the input wraps up
100
+
101
+ break;
102
+
103
+ //if it is a blank, the result is "1"
104
+
105
+ if(buf.contentEquals(""))
106
+
107
+
108
+
109
+
110
+
111
+ System.out.println(buf);
112
+
113
+ }
114
+
115
+ try {//Exception handling
116
+
117
+ x = Integer.parseInt(buf);//arise an Exception if input value wasn't number
118
+
119
+
120
+
121
+ }catch (NumberFormatException e) {
122
+
123
+ x = 0;
124
+
125
+ System.out.println("数値を入力してください");
126
+
127
+ }
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+ }catch(IOException e) {//handle the exception and print line the stings below
136
+
137
+ System.out.println("入出力例外が発生しました");
138
+
139
+ }
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+ }
152
+
153
+
154
+
155
+ }
156
+
157
+ 追記:
158
+
159
+ 現在のソースコード:
160
+
41
- while (!(str = br.readLine()).isEmpty())//入力された値が空なら入力終了
161
+ while (!(str = br.readLine()).isEmpty())//入力された値が空なら入力終了
42
162
 
43
163
  try {
44
164
 
@@ -49,28 +169,6 @@
49
169
  System.out.println("数値を入力してください");//その例外が発生したら出力
50
170
 
51
171
  }
52
-
53
- str = String.format("%,.16g", product);//積算された値をString.format methodで編集してカンマ区切り
54
-
55
- if (str.indexOf('.') >= 0)//search index of "."
56
-
57
- str = str.replaceAll("0*$", "").replaceAll("\.$", "");
58
-
59
- System.out.println("入力された値の積 : " + str);
60
-
61
- } catch (IOException e) {
62
-
63
- System.out.println("入出力例外が発生しました");
64
-
65
- }
66
-
67
- }
68
-
69
-
70
-
71
-
72
-
73
- }
74
172
 
75
173
  ### 発生している問題・エラーメッセージ
76
174
 

1

現在のソースコードと例外発生の追加

2020/04/05 00:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -14,57 +14,7 @@
14
14
 
15
15
  文字列を数値に変換して前回の数値と今回入力された数値の積を出す記述方法や
16
16
 
17
- 入力が1つもない場合の演算結果を1に戻るとことかチンプンカンプンです。
18
-
19
- 仕様通りに書けなくて困っています。
20
-
21
- 仕様は以下の通りです。
22
-
23
- <仕様>
24
-
25
- ・数値以外が入力された場合は、「数値を入力してください」を表示する
26
-
27
- ・入出力例外が発生した場合は、「入出力例外が発生しました」を表示して、処理を終了する
28
-
29
- ・改行のみが入力された時点で入力を終了する
30
-
31
- ・演算の結果として、「入力された値の積 :(演算結果)」を表示する
32
-
33
- ・積算は「*」オペレータを使用し、double型の精度まで表示する
34
-
35
- ・演算結果は、3桁カンマ編集して表示する
36
-
37
- ・入力が1つもない場合の演算結果は「1」とする
38
-
39
-
40
-
41
17
  ※入力はscannar以外を使用して必ずIOExceptionを発生させる
42
-
43
-
44
-
45
- ■ 出力例
46
-
47
- 積を求める数値を入力してください
48
-
49
- 13
50
-
51
- 9.3
52
-
53
- a
54
-
55
- 数値を入力してください
56
-
57
- 32
58
-
59
- 6.7
60
-
61
-
62
-
63
- 入力された値の積 : 25,920.96
64
-
65
-
66
-
67
-
68
18
 
69
19
 
70
20
 
@@ -74,110 +24,64 @@
74
24
 
75
25
  言語名JAVA
76
26
 
77
- import java.io.*;
78
-
79
-
80
-
81
- public class Exercise3 {
82
-
83
27
 
84
28
 
85
29
  public static void main(String[] args) {
86
30
 
87
- // TODO Auto-generated method stub
88
-
89
- int x;
90
-
91
- System.out.println("入力された値の積 ::");
31
+ System.out.println("積を求める数値を入力してくだ");
92
-
93
- //keyboard inputs
94
-
95
- InputStreamReader isr = new InputStreamReader(System.in);
96
-
97
- BufferedReader br = new BufferedReader(isr);
98
-
99
-
100
-
101
-
102
32
 
103
33
  try {
104
34
 
105
- String buf;
35
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//入力
106
36
 
107
- while(true) {
37
+ double product = 1;//initial value
108
38
 
109
- buf = br.readLine();//Arise an IOException intentionally
39
+ String str;
110
40
 
111
- if(buf.contentEquals(""))//if the value is the only new line , the input wraps up
41
+ while (!(str = br.readLine()).isEmpty())//入力された値が空なら入力終了
112
42
 
113
- break;
43
+ try {
114
44
 
115
-
45
+ product *= Double.valueOf(str);//受け取った値を数値(Double type)に変換して変数"product"に代入
116
46
 
117
-
47
+ } catch (NumberFormatException e) {//数値以外の入力なら例外発生
118
48
 
119
-
49
+ System.out.println("数値を入力してください");//その例外が発生したら出力
120
50
 
121
- System.out.println(buf);
51
+ }
122
52
 
123
- }
53
+ str = String.format("%,.16g", product);//積算された値をString.format methodで編集してカンマ区切り
124
54
 
125
- try {//Exception handling
55
+ if (str.indexOf('.') >= 0)//search index of "."
126
56
 
127
- x = Integer.parseInt(buf);//arise an Exception if input value wasn't number
57
+ str = str.replaceAll("0*$", "").replaceAll("\.$", "");
128
58
 
129
-
59
+ System.out.println("入力された値の積 : " + str);
130
60
 
131
- }catch (NumberFormatException e) {
61
+ } catch (IOException e) {
132
62
 
133
- x = 0;
63
+ System.out.println("入出力例外が発生しました");
134
64
 
135
- System.out.println("数値を入力してください");
65
+ }
136
66
 
137
- }
67
+ }
138
-
139
-
140
-
141
-
142
-
143
-
144
-
145
- }catch(IOException e) {//handle the exception and print line the stings below
146
-
147
- System.out.println("入出力例外が発生しました");
148
-
149
- }
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
-
160
-
161
- }
162
-
163
-
164
-
165
- ### 試したこと
166
-
167
-
168
-
169
- 入力された文字列を数値に変換し、数値以外の入力→例外処理
170
-
171
- IOExceptionを発生させて例外処理
172
68
 
173
69
 
174
70
 
175
71
 
176
72
 
177
- すみませんが大至急お願いします
73
+ }
178
74
 
75
+ ### 発生している問題・エラーメッセージ
179
76
 
77
+ java.lang.NullPointerException
180
78
 
79
+ 原因:Ctr+Zを押して入力終了をさせたら上記のエア-がかえった。
181
80
 
81
+ ### 試したこと
182
82
 
83
+ while (!(str = br.readLine()).isEmpty()){
84
+
85
+ をWhile((str = br.readLine())!= null){
86
+
183
-
87
+ にしてみましたがダメでした