質問: 以下のプログラムで、誕生日の入力を要求しています。仮に誕生日が1月1日であれば、「誕生日は元日ですね」と表示させ、それ以外の日付であれば、入力された誕生日を表示させるようにしています。 ただ、ユーザーが誤って、「◯月◯日」以外の形式で入力することも考えられ、その際には「正しい形で入力してください」と表示させたいです。その時の処理をどう書けば良いか、教えて頂ければ幸いです。 try,cathchで作って見ましたが、今のままだと、例えば「りんご」と入力したら、「誕生日はりんごです」と表示されてしまいます。 ``` package name; import java.util.*; //米印必須。もしくはjava.util.Scanner public class Sample2 { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ System.out.println("あなたの名前を入力してください"); Scanner sc=new Scanner(System.in); String name=sc.nextLine(); System.out.println(name); while(true){ System.out.println("誕生日はいつですか?数字は半角で◯月◯日の形で入れてください>"); Scanner sr=new Scanner(System.in);//誕生日を入力 try{ String birthday=sr.nextLine(); if(birthday.equals("1月1日")){System.out.println("あなたの誕生日は元日ですね");} else {System.out.println("誕生日は"+birthday+"です");} } catch (Exception e) { // TODO: handle exception System.out.println("エラーです。中断します"); } } } } ``` 実行環境は以下の通りです。 openjdk version "15.0.1" 2020-10-20 OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.1+9) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.1+9, mixed mode, sharing)
回答: try - catch で動かないのは、「入力が◯月◯日以外の形式だったら例外を投げる」というコードがないからです。 例外を投げるようにコードを変更してもよいですが、単純に `if` で分岐すればよいでしょう。 ``` Scanner sr = new Scanner(System.in); // 誕生日を入力 String birthday = sr.nextLine(); if (birthdayが"◯月◯日"という形式ではなかったら) { System.out.println("エラーです。中断します"); continue; } if (birthday.equals("1月1日")){ System.out.println("あなたの誕生日は元日ですね"); } else { System.out.println("誕生日は" + birthday + "です"); } ``` 形式のチェックは正規表現でやるのが簡単かもしれません。例: `\d{1,2}月\d{1,2}日` ありえない日付も除外するなら、別の方法が必要です。