読者です 読者をやめる 読者になる 読者になる

年齢にマイナスを入れると例外を発生する

Java プログラミング

概要

いわゆるユーザー情報管理
ありえない年齢を入力すると例外を発生する。
1.コマンドラインからユーザー名と年齢を指定する。
2.仮のデータとして名無し、0歳のオブジェクトを生成する。
3.名前と年齢をコマンドラインから受け取った値に設定する。
4.設定した年齢が負の値の場合は例外を投げる。この例外は自作。

import java.io.IOException;

class UserInfo {
    private String name;
    private int    age;

    public UserInfo() {
        this.name = "名無し";
        this.age = 0;
        System.out.println("ユーザー情報管理オブジェクトを" + this.name + "、" + this.age + "で生成しました");
    }

    public String getName() {
        return this.name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("ユーザー名を" + this.name + "に変更設定しました。");
    }

    public void setAge(int age) throws InvalidUserAgeException {
        // 年齢を設定するメソッド。負の場合はエラーを投げる。
        if (age < 0) {
            throw new InvalidUserAgeException(age, "ユーザー年齢は0歳以上とすること ");
        }
        this.age = age;
        System.out.println("ユーザー年齢を" + this.age + "に変更設定しました。");
    }

    public String toString() {
        return "ユーザー名:" + this.name + "ユーザー年齢:" + this.age;
    }
}

class InvalidUserAgeException extends Exception {
    int age;

    InvalidUserAgeException(int age, String errormessage) {
        super(errormessage);
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }
}

class UserAdmin {
    public static void main(String[] args) throws IOException {
        if (args.length != 2) {
            System.out.println("コマンドライン引数の指定が不正です");
            System.exit(1);
        }
        UserInfo ui = new UserInfo();
        String name;
        int age;
        try {
            name = args[0];
            age = Integer.parseInt(args[1]);

            ui.setName(name);
            ui.setAge(age);

            System.out.println("Name:" + ui.getName());
            System.out.println("Age:" + ui.getAge());
        } catch (InvalidUserAgeException e) {
            System.out.println("Error:" + e.getMessage());
            System.out.println("年齢が負です。 " + e.getAge());
        } catch (NumberFormatException e) {
            System.out.println("Error:指定した引数から年齢を抽出できませんでした。");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println("プログラムを終了します。");
    }
}

実行結果

>java 綾瀬はるか -10
ユーザー情報管理オブジェクトを名無し、0で生成しました
ユーザー名を綾瀬はるかに変更設定しました。
Error:ユーザー年齢は0歳以上とすること
年齢が負です。 -10
プログラムを終了します。

原色 綾瀬はるか

原色 綾瀬はるか