diff --git a/StringCheck/src/day3/StringCheckSample.java b/StringCheck/src/day3/StringCheckSample.java new file mode 100644 index 0000000..99d86b5 --- /dev/null +++ b/StringCheck/src/day3/StringCheckSample.java @@ -0,0 +1,116 @@ +package day3; + +import java.util.Scanner; + +/* + * StringCheck.java + * ------------------------------------------------------------ + * 【1日目・2日目終了時点のプログラム】 + * + * これは、3日目ミッション「段階1〜3(メソッドへの切り出し)」の + * 出発点として使う、リファクタリング前のベースコードです。 + * + * 3日目の段階1〜3では、このファイルの「動作(画面の表示内容)」は + * 一切変えずに、コードの「構造」だけを inputString() / setUpLogger() + * という別メソッドに整理し直していきます。 + * これが実務でいう「リファクタリング(外から見た動きを変えずに、 + * 中身の構造を整理すること)」です。 + * + * この時点では、まだ次のことを行っていません(後日のミッションで扱います)。 + * ・main以外のメソッドへの切り出し + * ・ログ出力(Logger)の実装 + * ・例外処理(try-catch) + * ------------------------------------------------------------ + */ +public class StringCheckSample { + + public static void main(String[] args) { + + // ============================================================ + // 1日目 段階1:画面に表示する文言を、あらかじめ配列にまとめておく + // ============================================================ + // 何度も使う固定の文言は、1つずつバラバラに書くのではなく、 + // 配列にまとめておくと管理しやすい。 + // messages[0] … 入力を促すプロンプト + // messages[1] … 未入力(または空白のみ)のときのエラーメッセージ + // messages[2] … 文字数が多すぎるときのエラーメッセージ + // messages[3] … 投稿が成功したときに表示するバナー + String[] messages = { + "いまなにしてる?", + "何も入力されていません", + "投稿文が長すぎます", + "↓↓↓↓↓↓ 投稿されました ↓↓↓↓↓↓" + }; + + // ============================================================ + // 2日目 段階1:標準入力を読み取る準備をする + // ============================================================ + // Scanner は、キーボードからの入力(標準入力)を読み取るためのクラス。 + // ループの中で毎回新しく作るのではなく、ループの外で1回だけ用意して + // 使い回す。 + Scanner scanner = new Scanner(System.in); + + // 投稿内容(前後の空白を除去したあとの文字列)を保持する変数。 + // while文を抜けたあとでも使うので、while文の外で宣言しておく。 + String str = ""; + + // ============================================================ + // 2日目 段階1:while(true) で「正しい入力が得られるまで繰り返す」 + // ============================================================ + // 何回繰り返すかがあらかじめ決まっていないので、while(true) の + // 無限ループにして、条件を満たしたときに break でループを抜ける + // 作りにする。 + while (true) { + + // ---- 1日目 段階3:プロンプトの表示 ---- + // 配列の0番目に入れておいたプロンプト文言を表示する。 + System.out.println(messages[0]); + + // ---- 1日目 段階2:標準入力の読み込みと空白除去 ---- + // キーボードから1行分の文字列を読み取る。 + String line = scanner.nextLine(); + // 読み取った文字列の前後にある空白文字(半角スペース・全角スペース + // など)を取り除き、str に格納する。 + str = line.strip(); + + // ---- 1日目 段階3:比較演算子で真偽値を求める ---- + // 1日目の時点ではif文がまだ使えなかったため、この2つの真偽値は + // 画面に表示して目視確認するだけだった。 + // 2日目からは、この真偽値をそのままif文の条件として使う。 + boolean isEmpty = (str.length() == 0); + boolean isTooLong = (str.length() > 140); + + // ============================================================ + // 2日目 段階2:if文による検証ロジック + // ============================================================ + if (isEmpty) { + // 何も入力されていない(または空白のみ入力された)場合 + System.out.println(messages[1]); + // continue で、while文の先頭(プロンプト表示)に戻り、 + // もう一度入力をやり直してもらう。 + continue; + } + + if (isTooLong) { + // 141文字以上入力された場合 + System.out.println(messages[2]); + // continue で、while文の先頭に戻る。 + continue; + } + + // ここまで到達したということは、 + // 「空文字でもなく、文字数超過でもない」=正しい入力が得られた + // ということなので、break でループを抜ける。 + break; + } + + // ============================================================ + // 1日目 段階3:投稿完了処理(検証をクリアしたあとの表示) + // ============================================================ + // 空行を1行はさんでから、投稿完了バナーと投稿内容を表示する。 + System.out.println(); + System.out.println(messages[3]); + System.out.println(str); + } +} + diff --git a/StringCheck/src/stringCheck/StringCheck4.java b/StringCheck/src/stringCheck/StringCheck4.java index 63e004a..f52786b 100644 --- a/StringCheck/src/stringCheck/StringCheck4.java +++ b/StringCheck/src/stringCheck/StringCheck4.java @@ -9,14 +9,15 @@ public class StringCheck4 { comment[1] = "何も入力されていません"; comment[2] = "投稿文が長すぎます"; comment[3] = "\"↓↓↓↓↓↓ 投稿されました ↓↓↓↓↓↓\""; - - + + String str; + while (true) { System.out.println(comment[0]); Scanner scanner = new Scanner(System.in); String text = scanner.nextLine(); - String str = text.strip(); + str = text.strip(); if(str.length() == 0) { System.out.println("何も入力されていません"); @@ -27,13 +28,12 @@ public class StringCheck4 { } - + } System.out.println("\n" + comment[3]); System.out.println(str); - break; - } + diff --git a/StringCheck/src/stringCheck/StringCheck4_1.java b/StringCheck/src/stringCheck/StringCheck4_1.java new file mode 100644 index 0000000..2a289ae --- /dev/null +++ b/StringCheck/src/stringCheck/StringCheck4_1.java @@ -0,0 +1,42 @@ +package stringCheck; + +import java.util.Scanner; + +public class StringCheck4_1 { + public static void main(String[] args) { + String[] comment = new String[4]; + comment[0] = "いまなにしてる?"; + comment[1] = "何も入力されていません"; + comment[2] = "投稿文が長すぎます"; + comment[3] = "\"↓↓↓↓↓↓ 投稿されました ↓↓↓↓↓↓\""; + + + + while (true) { + System.out.println(comment[0]); + Scanner scanner = new Scanner(System.in); + String text = scanner.nextLine(); + String str = text.strip(); + + if(str.length() == 0) { + System.out.println("何も入力されていません"); + continue; + }else if(str.length() > 140){ + System.out.println("投稿文が長すぎます"); + continue; + } + + + + System.out.println("\n" + comment[3]); + System.out.println(str); + break; + + + } + + + + } + +} diff --git a/StringCheck/src/stringCheck/StringCheck5.java b/StringCheck/src/stringCheck/StringCheck5.java new file mode 100644 index 0000000..c0ffd30 --- /dev/null +++ b/StringCheck/src/stringCheck/StringCheck5.java @@ -0,0 +1,43 @@ +package stringCheck; + +import java.util.Scanner; + +public class StringCheck5 { + public static void main(String[] args) { + String[] comment = new String[4]; + comment[0] = "いまなにしてる?"; + comment[1] = "何も入力されていません"; + comment[2] = "投稿文が長すぎます"; + comment[3] = "\"↓↓↓↓↓↓ 投稿されました ↓↓↓↓↓↓\""; + + + + while (true) { + System.out.println(comment[0]); + Scanner scanner = new Scanner(System.in); + String text = scanner.nextLine(); + String str = text.strip(); + + + String result; + + result = + + if(str.length() == 0) { + System.out.println("何も入力されていません"); + continue; + }else if(str.length() > 140){ + System.out.println("投稿文が長すぎます"); + continue; + } + + + System.out.println("\n" + comment[3]); + System.out.println(str); + break; + } + + + } + +}