73236


以下のプログラムで、誕生日の入力を要求しています。仮に誕生日が1月1日であれば、「誕生日は元日ですね」と表示させ、それ以外の日付であれば、入力された誕生日を表示させるようにしています。  
ただ、ユーザーが誤って、「◯月◯日」以外の形式で入力することも考えられ、その際には「正しい形で入力してください」と表示させたいです。その時の処理をどう書けば良いか、教えて頂ければ幸いです。  
try,cathchで作って見ましたが、今のままだと、例えば「りんご」と入力したら、「誕生日はりんごです」と表示されてしまいます。

[code]

    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("エラーです。中断します");
                }
            }
        }
    }
    
[/code]

実行環境は以下の通りです。  
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)


CC BY-SA 4.0
2021-01-10T10:56:10.803
73195
2021-01-12T08:10:03.143
2021-01-12T08:10:03.143
3060
39688
question
java
誕生日の入力を要求するプログラムで、誕生日（◯月◯日）以外の値が入力された時の処理文の書き方を教えて頂きたいです。


try - catch で動かないのは、「入力が◯月◯日以外の形式だったら例外を投げる」というコードがないからです。

例外を投げるようにコードを変更してもよいですが、単純に `if` で分岐すればよいでしょう。

[code]

    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 + "です");
    }
    
[/code]

形式のチェックは正規表現でやるのが簡単かもしれません。例: `\d{1,2}月\d{1,2}日`  
ありえない日付も除外するなら、別の方法が必要です。


CC BY-SA 4.0
2021-01-12T03:21:24.653
73236
2021-01-12T03:21:24.653
3475
73195
answer