質問編集履歴
5
test
CHANGED
File without changes
|
test
CHANGED
@@ -233,3 +233,9 @@
|
|
233
233
|
#等を入力させて終了させるとかそもそも別のやり方があるだろうという方もいらっしゃると思います。
|
234
234
|
|
235
235
|
その通りだと思います。良い案があれば是非教えていただきたいです。
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
間違った表現を修正しました。
|
240
|
+
|
241
|
+
ご指摘ありがとうございます。
|
4
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,9 +12,9 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
0. 適当な文字列その2を1.と同じ条件で入力
|
15
|
+
0. 適当な文字列その2を1.と同じ条件で入力
|
16
|
-
|
16
|
+
|
17
|
-
どちらか片方
|
17
|
+
どちらか片方が空欄の場合は不正として再入力させる
|
18
18
|
|
19
19
|
|
20
20
|
|
3
書式の改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -184,6 +184,28 @@
|
|
184
184
|
|
185
185
|
|
186
186
|
|
187
|
+
|
188
|
+
|
189
|
+
正規表現「^[a-zA-Z0-9]{3,11}$」ですと入力なしの時もfind()でfalseになってしまいます。
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
str1とstr2の文字数が0の時に終了と判断すればいいかと思い書いてみましたが
|
194
|
+
|
195
|
+
入力エラーとなってしまったり
|
196
|
+
|
197
|
+
ならばその内側に正規表現とも一致しない条件を追加して。。。
|
198
|
+
|
199
|
+
とやっていたら思い通りに動きました。
|
200
|
+
|
201
|
+
が、なんかごちゃごちゃしている気がします。
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
もっと頭のいい人がうまく作るとどうなるのだろうか気になり質問させて頂いております。
|
206
|
+
|
207
|
+
|
208
|
+
|
187
209
|
*私は3ヶ月ほど前にプログラミングを始めたばかりなので超基本を知らなかったり、忘れていたりします。
|
188
210
|
|
189
211
|
ぜひその辺り思い当たれば伝えていただきたいです。
|
@@ -211,5 +233,3 @@
|
|
211
233
|
#等を入力させて終了させるとかそもそも別のやり方があるだろうという方もいらっしゃると思います。
|
212
234
|
|
213
235
|
その通りだと思います。良い案があれば是非教えていただきたいです。
|
214
|
-
|
215
|
-
が、できればこのやり方でソースコードをきれいにしてみたいのでよろしくお願いします。
|
2
ソースコードを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -28,49 +28,159 @@
|
|
28
28
|
|
29
29
|
終了
|
30
30
|
|
31
|
+
|
32
|
+
|
33
|
+
```Java
|
34
|
+
|
35
|
+
public ArrayList<StrClass> input() {
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
Pattern p = Pattern.compile("^[a-zA-Z0-9]{3,11}$");
|
40
|
+
|
41
|
+
Matcher m;
|
42
|
+
|
43
|
+
boolean is_valid_str1;
|
44
|
+
|
45
|
+
boolean is_valid_str2;
|
46
|
+
|
47
|
+
String user_input_str1;
|
48
|
+
|
49
|
+
String user_input_str2;
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
ArrayList<StrClass> strList = new ArrayList<StrClass>();
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
try {
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
//文字列その1 入力
|
62
|
+
|
63
|
+
user_input_str1 = br.readLine();
|
64
|
+
|
65
|
+
m = p.matcher(user_input_str1);
|
66
|
+
|
67
|
+
is_valid_str1 = m.matches();
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
//文字列その2 入力
|
72
|
+
|
73
|
+
user_input_str2 = br.readLine();
|
74
|
+
|
75
|
+
m = p.matcher(user_input_str2);
|
76
|
+
|
77
|
+
is_valid_str2 = m.matches();
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
if(is_valid_str1 && is_valid_str2){
|
82
|
+
|
83
|
+
StrClass strClass = new StrClass();
|
84
|
+
|
85
|
+
strClass.setterStr1(user_input_str1);
|
86
|
+
|
87
|
+
strClass.setterStr2(user_input_str2);
|
88
|
+
|
89
|
+
strClass.add(strClass);
|
90
|
+
|
91
|
+
}else if(user_input_str1.length() != 0 && user_input_str2.length() != 0){
|
92
|
+
|
93
|
+
if(!is_valid_str1 || !is_valid_str2){
|
94
|
+
|
95
|
+
//エラー 文字列が不正
|
96
|
+
|
97
|
+
continue;
|
98
|
+
|
99
|
+
}
|
100
|
+
|
101
|
+
}else if(user_input_str1.length() == 0 && user_input_str2.length() == 0){
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
boolean not_fin_flag = true;
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
while(not_fin_flag){
|
110
|
+
|
111
|
+
//入力を終了するか確認
|
112
|
+
|
113
|
+
String is_input_fin = br.readLine();
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
if(is_input_fin.equals("y") || is_input_fin.equals("Y")){
|
118
|
+
|
119
|
+
not_fin_flag = false;
|
120
|
+
|
121
|
+
break;
|
122
|
+
|
123
|
+
}else if(is_input_fin.equals("n") || is_input_fin.equals("N")){
|
124
|
+
|
125
|
+
not_fin_flag = true;
|
126
|
+
|
127
|
+
break;
|
128
|
+
|
129
|
+
}else{
|
130
|
+
|
131
|
+
//エラー y/n以外の入力がされた
|
132
|
+
|
133
|
+
}
|
134
|
+
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
if(not_fin_flag){
|
140
|
+
|
141
|
+
continue;
|
142
|
+
|
143
|
+
}else{
|
144
|
+
|
145
|
+
break;
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
}else{
|
150
|
+
|
151
|
+
//エラー 文字列が不正
|
152
|
+
|
153
|
+
continue;
|
154
|
+
|
155
|
+
}
|
156
|
+
|
157
|
+
} catch (IOException e) {
|
158
|
+
|
159
|
+
// TODO 自動生成された catch ブロック
|
160
|
+
|
161
|
+
// 例外の使い方はまだ知らないです。eclipseが怒るのでつけました。
|
162
|
+
|
163
|
+
e.printStackTrace();
|
164
|
+
|
165
|
+
}
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
return strList;
|
170
|
+
|
171
|
+
}
|
172
|
+
|
173
|
+
```
|
174
|
+
|
175
|
+
|
176
|
+
|
31
177
|
###入力チェック、終了確認の段階でif文が大量発生
|
32
178
|
|
33
179
|
|
34
180
|
|
35
181
|
```
|
36
182
|
|
37
|
-
入力チェックには正規表現を使っています。『^[a-zA-Z0-9]{3,11}$』
|
38
|
-
|
39
|
-
しかし、片方だけ空欄の時はエラー、共に空欄の時は終了する。
|
40
|
-
|
41
|
-
ここで見出し通りの事態に陥っています。
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
この正規表現ですと、空欄を不正と判断します。
|
46
|
-
|
47
|
-
片方だけが空欄の時は不正、両方とも空欄なら終了と判断すると、両方に全角や記号等を入力された時にも終了してしまいます。
|
48
|
-
|
49
|
-
ですので文字数が共に0だった時、両方が不正なら終了して終了確認をすることにしました。
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
終了確認は y/n を入力してもらうので、
|
54
|
-
|
55
|
-
yなのか、nなのか、それ以外なのか
|
56
|
-
|
57
|
-
それ以外の場合は不正であるとして再入力を促します。
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
こ
|
183
|
+
この継ぎ接ぎな感じをなんとかしたいと思いましたが、精一杯やってみてこれです。
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
確認は
|
66
|
-
|
67
|
-
while(true)の無限ループを作り、if文でyまたはnが入力されたらbreak
|
68
|
-
|
69
|
-
というようになっていて、これが上記のif文の中に入っています。
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
ただでさえ分岐の多い中、whileの中にifが入っているとなると分かりづらいです。
|
74
184
|
|
75
185
|
|
76
186
|
|
1
初心者マークを追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|