88576


**コードや質問文の方少し長くなると思いますが、ご了承ください。**

* * *

現在、4人の人間をオブジェクト指向を用いてコンストラクタとして生成し、生成した回数だけその人の「名前、年齢、身長、体重」などを出力するプログラムを作ろうとしています。  
以下が _Main.java_ からインスタンスの情報を受け取った _Person.java_ のコードです。  
後に _Person.java_ のコードを活用し _Main.java_ でそれぞれの情報を出力します。

しかし、 _Main.java_ のコメント分にも書いてあるように、一人生成する毎に _Main.java_
で沢山のコードを書かなければいけなく、後にもっと人数が増えたときに  
・人数の記憶が困難になる  
・増えるにつれてもっと膨大な量のコードを書かなければならない  
と言う問題が起きることを推測しました。

* * *

(以下コード)

**Person.java：**

[code]

    public class Person {
        private String firstName;
        private String lastName;
        private int age;
        private double height;
        private double weight;
        public static int count = 0;  //生成回数を設定
        
        Person(String firstName, String lastName, int age, double height, double weight) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.age = age;
            this.height = height;
            this.weight = weight;
            count++;
        }
       public String getFullName() {
           return this.firstName + " " + this.lastName;
       }
       public int getAge() {
           return this.age;
       }
       public double getHeight() {
           return this.height;
       }
       public double getWeight() {
           return this.weight;
       }
        
    }
    
[/code]

* * *

**Main.java：**

[code]

    public class Main{
        public static void main (String args[]){
            Person person1 = new Person("Aくん","鈴木",20,176,64);
            Person person2 = new Person("Bさん","佐々木",21,178,65);
            Person person3 = new Person("Cさん","山田",22,185,63);
            Person person4 = new Person("Dくん","横山",23,180,60);
            
            
            System.out.println("person1の名前は " + person1.getFullName());
            System.out.println("person1の年齢は" + person1.getAge());
            System.out.println("person1の身長は" + person1.getHeight());
            System.out.println("person1の体重は" + person1.getWeight());
            
            System.out.println("-----------------------------------------------");
            
            System.out.println("person2の名前は " + person2.getFullName());
            System.out.println("person2の年齢は" + person2.getAge());//………とコンストラクタが生成された回数分出力する
             /*以下省略*/
            }
    }
            /*…………のように一人ひとり生成する度に沢山のコードを書かなければいけない*/
    
[/code]

* * *

そこで、for文などを使って生成回数される毎に繰り返し処理をするプログラムを作ろうと図りますが、例えば

[code]

    for(int i = 1; i<Person.count+1; i++){
                System.out.println("person" + i + "の名前は" + person(/*ここにpersonの数を書きたい*/).getFullName());
                /*以下省略しますが年齢、身長、体重などを書く*/
            }
    
[/code]

と言う風に書き込んだときに、`person〇〇.getFullName()`と生成回数を書くときに、手が止まってしまいます。

`person(i).getFullName()`や`person(Person.count).getFullName()`と入力しても、  
`cannnot find symbol`とエラーが起きてしまいます。

そこで、以上のことから、  
**・コンストラクタの生成回数が1増えるごとに生成された数だけ繰り返し処理を書く**  
(コードの書く量が減る、効率的な）  
**プログラムを書くにはどのようにすればいいのか**

を教えていただければ恐縮です。

まだ文章を書くことに慣れておらず、以上の質問文に無駄な部分や分かりづらい箇所があるところも多いと思いますが、何卒よろしくお願いいたします。


CC BY-SA 4.0
2022-04-29T16:53:19.973
88572
2022-05-12T08:30:31.763
2022-04-29T21:21:56.690
51596
51596
question
java
インスタンスの生成回数を繰り返し処理を使って表したい


配列や`ArrayList`を使うのがいいでしょう。

ArrayListでの生成

[code]

    List<Person> list = new ArrayList<Person>();
    list.add(new Person("Aくん","鈴木",20,176,64));
    list.add(new Person("Bさん","佐々木",21,178,65));
    ...
    
[/code]

ArrayListでの参照

[code]

    for (int i = 0; i < list.size(); i++){
        System.out.println("person" + (i + 1) + "の名前は" + list.get(i).getFullName());
    
[/code]


CC BY-SA 4.0
2022-04-30T00:42:42.300
88576
2022-04-30T00:42:42.300
3475
88572
answer


コード量が少なくて見通しが付きやすいという意味では、

[code]

    Person[] people = {
        new Person("Aくん","鈴木",20,176,64),
        new Person("Bさん","佐々木",21,178,65),
        new Person("Cさん","山田",22,185,63),
        new Person("Dくん","横山",23,180,60),
    };
    
[/code]

とするのが良いでしょう。こう書いたあとでListがほしければList.of(people)することで対応できます。


CC BY-SA 4.0
2022-05-12T07:54:58.500
88780
2022-05-12T08:30:31.763
2022-05-12T08:30:31.763
5734
5734
88572
answer