Javaを使った簡単なプログラムを作っています。
開始
- 適当な文字列その1を入力してエンターキー(3文字以上10文字以下、半角数字、半角大小英字のみ)
1.1 不正な文字列の場合は再入力させる
- 適当な文字列その2を1.と同じ条件で入力
どちらか片方が空欄の場合は不正として再入力させる
- その1、2共に何も入力しない状態でエンターキーが押されるまで繰り返す
3.2 終了時には終了して良いか確認する。(y/n y:終了 n:終了しないで 1. へ戻る)
0. 『文字列その1,文字列その2』のように、csvファイル形式で出力
終了
Java
1public ArrayList<StrClass> input() { 2 3 Pattern p = Pattern.compile("^[a-zA-Z0-9]{3,11}$"); 4 Matcher m; 5 boolean is_valid_str1; 6 boolean is_valid_str2; 7 String user_input_str1; 8 String user_input_str2; 9 10 ArrayList<StrClass> strList = new ArrayList<StrClass>(); 11 12 try { 13 14 //文字列その1 入力 15 user_input_str1 = br.readLine(); 16 m = p.matcher(user_input_str1); 17 is_valid_str1 = m.matches(); 18 19 //文字列その2 入力 20 user_input_str2 = br.readLine(); 21 m = p.matcher(user_input_str2); 22 is_valid_str2 = m.matches(); 23 24 if(is_valid_str1 && is_valid_str2){ 25 StrClass strClass = new StrClass(); 26 strClass.setterStr1(user_input_str1); 27 strClass.setterStr2(user_input_str2); 28 strClass.add(strClass); 29 }else if(user_input_str1.length() != 0 && user_input_str2.length() != 0){ 30 if(!is_valid_str1 || !is_valid_str2){ 31 //エラー 文字列が不正 32 continue; 33 } 34 }else if(user_input_str1.length() == 0 && user_input_str2.length() == 0){ 35 36 boolean not_fin_flag = true; 37 38 while(not_fin_flag){ 39 //入力を終了するか確認 40 String is_input_fin = br.readLine(); 41 42 if(is_input_fin.equals("y") || is_input_fin.equals("Y")){ 43 not_fin_flag = false; 44 break; 45 }else if(is_input_fin.equals("n") || is_input_fin.equals("N")){ 46 not_fin_flag = true; 47 break; 48 }else{ 49 //エラー y/n以外の入力がされた 50 } 51 } 52 53 if(not_fin_flag){ 54 continue; 55 }else{ 56 break; 57 } 58 }else{ 59 //エラー 文字列が不正 60 continue; 61 } 62 } catch (IOException e) { 63 // TODO 自動生成された catch ブロック 64 // 例外の使い方はまだ知らないです。eclipseが怒るのでつけました。 65 e.printStackTrace(); 66 } 67 68 return strList; 69 }
###入力チェック、終了確認の段階でif文が大量発生
この継ぎ接ぎな感じをなんとかしたいと思いましたが、精一杯やってみてこれです。 正規表現「^[a-zA-Z0-9]{3,11}$」ですと入力なしの時もfind()でfalseになってしまいます。 str1とstr2の文字数が0の時に終了と判断すればいいかと思い書いてみましたが 入力エラーとなってしまったり ならばその内側に正規表現とも一致しない条件を追加して。。。 とやっていたら思い通りに動きました。 が、なんかごちゃごちゃしている気がします。 もっと頭のいい人がうまく作るとどうなるのだろうか気になり質問させて頂いております。 *私は3ヶ月ほど前にプログラミングを始めたばかりなので超基本を知らなかったり、忘れていたりします。 ぜひその辺り思い当たれば伝えていただきたいです。
###if文を減らすために
何か良い案はありませんか。
質問になっていないですが、お力を貸していただきたいです。
一応動くところまでは持ってきました。
きちんと動作することは自分で確かめることができますが、もっと良いやり方は自分よりできる方に聞かないと分かりません。。。
###補足
#等を入力させて終了させるとかそもそも別のやり方があるだろうという方もいらっしゃると思います。
その通りだと思います。良い案があれば是非教えていただきたいです。
間違った表現を修正しました。
ご指摘ありがとうございます。
回答5件
あなたの回答
tips
プレビュー