Progateで、Javaのオブジェクト指向の基礎を学びました

はじめに

本日ProgateのJava 道場レッスン IIをクリアしました。

Progateで行ったことを少しアレンジして、ローカルで試してみた内容について書いていきます。

Twitter

都市の名前を出力するプログラム

以下のように都市の名前を出力するプログラムを作成しました。

Cityクラスを定義しているのは、City.javaです。

public class City {
    private String name;

    public City(String name) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
    }
}

インスタンスを生成しているのは、App.javaです。このファイルを実行しました。

class App {
    public static void main(String[] args) {
        new City("名古屋");
    }
}

クラスの定義

Cityというクラスを定義することを考えると以下のようになります。

class City {
}

インスタンスフィールドの定義

クラスの中にインスタンスフィールドを定義します。

privateなインスタンスフィールドnameを定義しました。

class City {
 private String name;
}

コンストラクタの定義

クラス名を使用して以下の赤字部分のようにコンストラクタを定義します。System.out.printlnで、引数に渡した内容を出力することができます。

public class City {
    private String name;

    public City(String name) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
    }
}

mainメソッド

以下の赤字部分の中身に書いたコードが実行されます。

class App {
  public static void main(String[] args) {
    
  }
}

インスタンスの生成

以下のようにして、インスタンスを生成します。

class App {
  public static void main(String[] args) {
    new City("名古屋");
  }
}

都市の人口を出力できるようにした

先ほどのプログラムに人口を追加しました。

City.javaには、populationというプライベートなインスタンスフィールドと、コンストラクタに人口を出力する記述を追加しました。コンストラクタの引数のpopulationのデータ型がStringなのは、3桁区切りに変換しているためです。

public class City {
    private String name;
    private int population;

    public City(String name, String population) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + population);
    }
}

App.javaでは、人口を3桁区切りに変換した上で、インスタンスの引数に渡しています。

import java.text.DecimalFormat;

class App {
    public static void main(String[] args) {
        final DecimalFormat decFormat = new DecimalFormat("###,###");
        final String str = decFormat.format(2296000);
        new City("名古屋", str);
    }
}

男性の人口を出力できるようにした

男性の人口を出力できるようにしました。

City.java

public class City {
    private String name;
    private int population;
    private int men = 1071228;

    public City(String name, String population, String men) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + population + "人");
        System.out.println("男性の人口:" + men + "人");
    }
}

App.java

import java.text.DecimalFormat;

class App {
    public static void main(String[] args) {
        final DecimalFormat decFormat = new DecimalFormat("###,###");
        final String formated_population = decFormat.format(2296000);
        final String formated_men = decFormat.format(1071228);
        new City("名古屋", formated_population, formated_men);
    }
}

男性の人口を追加できるようにした

3桁にフォーマットする部分は、別の方法ですっきりとさせました。

City.java

public class City {
    private int men = 1071228;

    public City(String name, int population, int men) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + String.format("%,d", population) + "人");
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }

    public void add_men(int add_men) {
        System.out.println("-------------------------");
        System.out.println("男性の人口が" + String.format("%,d", add_men) + "人増えました");
        men += add_men;
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }
}

App.java

class App {
    public static void main(String[] args) {
        City city = new City("名古屋", 2296000, 1071228);
        city.add_men(1000);
    }
}

追加する男性の人口を入力できるようにした

ユーザーが入力した値を受け取って、計算された男性の人口が表示されるようにしました。

app.java

import java.util.Scanner;

class App {
    public static void main(String[] args) {
        City city = new City("名古屋", 2296000, 1071228);
        System.out.print("男性の人口はどれだけ増えましたか?:");
        try (Scanner scanner = new Scanner(System.in)) {
            int i = scanner.nextInt();
            city.add_men(i);
        }
    }
}

city.java

public class City {
    private int men = 1071228;

    public City(String name, int population, int men) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + String.format("%,d", population) + "人");
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }

    public void add_men(int add_men) {
        System.out.println("-------------------------");
        System.out.println("男性の人口が" + String.format("%,d", add_men) + "人増えました");
        men += add_men;
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }
}

国の情報を出力できるようにした

Country.javaというファイルを新規作成して、国の情報を出力できるようにしました。男性の人口は0人となってしまっています。

Country.java

public class Country {
    private int men = 1071228;

    public Country(String name, int population, int men) {
        System.out.println("【国の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + String.format("%,d", population) + "人");
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }

    public void add_men(int add_men) {
        System.out.println("-------------------------");
        System.out.println("男性の人口が" + String.format("%,d", add_men) + "人増えました");
        men += add_men;
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }
}

App.java

import java.util.Scanner;

class App {
    public static void main(String[] args) {
        City city = new City("名古屋", 2296000, 1071228);
        System.out.print("男性の人口はどれだけ増えましたか?:");
        try (Scanner scanner = new Scanner(System.in)) {
            int i = scanner.nextInt();
            city.add_men(i);
        }

        System.out.println("================================");
        Country country = new Country("日本", 125700000, 0);
    }
}

City.java

public class City {
    private int men = 1071228;

    public City(String name, int population, int men) {
        System.out.println("【都市の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + String.format("%,d", population) + "人");
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }

    public void add_men(int add_men) {
        System.out.println("-------------------------");
        System.out.println("男性の人口が" + String.format("%,d", add_men) + "人増えました");
        men += add_men;
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }
}

国の情報に女性の人口を追加した

国の情報に女性の人口を追加しました。

App.java

import java.util.Scanner;

class App {
    public static void main(String[] args) {
        City city = new City("名古屋", 2296000, 1071228);
        System.out.print("男性の人口はどれだけ増えましたか?:");
        try (Scanner scanner = new Scanner(System.in)) {
            int i = scanner.nextInt();
            city.add_men(i);
        }

        System.out.println("================================");
        Country country = new Country("日本", 125700000, 0, 64815079);
    }
}

Country.java

public class Country {
    private int men = 1071228;
    private int women = 64815079;

    public Country(String name, int population, int men, int women) {
        System.out.println("【国の情報】");
        System.out.println("名前:" + name);
        System.out.println("人口:" + String.format("%,d", population) + "人");
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
        System.out.println("女性の人口:" + String.format("%,d", women) + "人");
    }

    public void add_men(int add_men) {
        System.out.println("-------------------------");
        System.out.println("男性の人口が" + String.format("%,d", add_men) + "人増えました");
        men += add_men;
        System.out.println("男性の人口:" + String.format("%,d", men) + "人");
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です