2017-09-22 11 views
0

私は、人の誕生日、名前、誕生日、誕生日を追加できるプログラムをJavaで作成しようとしています。私は、毎月生まれた人と月の人数のリストを印刷することができるようにしたい。私は "人"クラスと "アナライザ"クラスの2つのクラス1つの次のコードを持っています。ここでは、次のコード、インデックスとwhileループを使用してarraylistにリストを作成させることはできません

import java.util.*; 
/* 
* This project will keep track of which day 
* (1 to 31) and which month (1 to 12)in which 
* people are born. 
* Look to LogAnalyzer for clue. 
*/ 

public class Person 
{ 
private int birthDay; 
private int birthMonth; 
private int birthYear; 
private String name; 

public Person(String name, int birthDay, int birthMonth, int birthYear) 
{ 
    this.name = name; 
    if(birthDay >= 1 && birthDay <= 31){ 
     this.birthDay = birthDay; 
    } 
    else { 
     this.birthDay = -1; 
    } 

    if(birthMonth >= 1 && birthMonth <= 12){ 
     this.birthMonth = birthMonth; 
    } 
    else { 
     this.birthMonth = -1; 
    } 

    this.birthYear = birthYear; 

} 

public String getName() 
{ 
    return name; 
} 

public int getBirthDay() 
{ 
    return birthDay; 
} 

    public int getBirthMonth() 
{ 
    return birthMonth; 
} 

public int getBirthYear() 
{ 
    return birthYear; 
} 

public String toString() 
{ 
    return "Name: " + getName() + " BirthDay: " + getBirthDay() + 
    " BirthMonth: " + getBirthMonth() + " BirthYear: " + 
getBirthYear(); 
} 


} 

import java.util.ArrayList; 
import java.util.Iterator; 

public class Analyzer 
{ 
// instance variables - replace the example below with your own 
private int []birthDayStats; 
private int []birthMonthStats; 
private ArrayList people; 

/** 
* Constructor for objects of class Analyzer 
*/ 
public Analyzer() 
{ 
    people = new ArrayList(); 
} 

public void addPerson(String name, int birthDay, int birthMonth, int 
birthYear) 
{ 
    Person person = new Person(name, birthDay, birthMonth, birthYear); 
    if(person.getBirthDay()!=-1|| person.getBirthMonth() != -1) { 
     people.add(person); 
     birthMonthStats [birthMonth]++; 
     birthDayStats[birthDay]++; 
    } 
    else 
    { 
     System.out.println ("Your current Birthday is " + birthDay + " or " 
+ birthMonth + " which is not a correct number 1-31 or 1-12 please put in a 
correct number "); 

    } 


} 

public void printPeople() //prints all people in form: “ Name: Tom 
Month: 5 Day: 2 Year: 1965” 
{ 
    int index = 0; 
    while(index < people.size()){  
     Person person = (Person) people.get(index);  
     System.out.println(person); 
     index++; 
    }   
} 

public void printMonthList()//prints the number of people born in each month 
Sample output to the right with days being similar 
{ 
    int index = 0; 
    while (index < birthMonthStats.length){ 
     System.out.println (birthMonthStats[index]); 
     index++; 
    } 
} 

}

私は悩みを抱えているコードは、私はそれを印刷しようとしている「printmonthlist」方法ですが、それは印刷されませんです。私は12ヶ月の月のリストと毎月生まれた人の数を印刷したい。あなたのいずれかが私に感謝を助けることができるならば。

+0

printMonthList()方法であなたのログを少し変え、あなたは[ 'LocalDate'](https://docs.oracle.com/javase/8/を使用することができますdocs/api/java/time/LocalDate.html)のクラスを使用しています。 'LocalDate.of(y、m、d)'と['YearMonth'](https://docs.oracle.com/javase/8/docs/api/java/time/YearMonth.html)&[' MonthDay' ](https://docs.oracle.com/javase/8/docs/api/java/time/MonthDay.html)のクラスが役立ちます。 –

答えて

0

あなたの配列を初期化するのを忘れました。ここで私のコードで見ることができるように、私はAnalyzer作成で2つの定数を持つ配列を初期化しました。 NB:読みやすくするために、私はちょうどところで

import java.util.ArrayList; 

public class Analyzer 
{ 
    // instance variables - replace the example below with your own 
    private final static int DAYS_PER_MONTH = 31; 
    private final static int MONTHS_PER_YEAR = 12; 
    private int []birthDayStats; 
    private int []birthMonthStats; 
    private ArrayList<Person> people; 

    /** 
    * Constructor for objects of class Analyzer 
    */ 
    public Analyzer() 
    { 
     this.people = new ArrayList<Person>(); 
     // A default value of 0 for arrays of integral types is guaranteed by the language spec 
     this.birthDayStats = new int[Analyzer.DAYS_PER_MONTH]; 
     // A default value of 0 for arrays of integral types is guaranteed by the language spec 
     this.birthMonthStats = new int[Analyzer.MONTHS_PER_YEAR]; 
    } 

    public void addPerson(String name, int birthDay, int birthMonth, int 
    birthYear) 
    { 
     Person person = new Person(name, birthDay, birthMonth, birthYear); 
     if(person.getBirthDay()!=-1|| person.getBirthMonth() != -1) { 
      people.add(person); 
      birthMonthStats [birthMonth-1]++; 
      birthDayStats[birthDay-1]++; 
     } 
     else 
     { 
      System.out.println ("Your current Birthday is " + birthDay + " or " 
    + birthMonth + " which is not a correct number 1-31 or 1-12 please put in a correct number "); 

     } 


    } 

    public void printPeople() //prints all people in form: “ Name: Tom Month: 5 Day: 2 Year: 1965” 
    { 
     int index = 0; 
     while(index < people.size()){  
      Person person = (Person) people.get(index);  
      System.out.println(person); 
      index++; 
     }   
    } 

    public void printMonthList()//prints the number of people born in each month Sample output to the right with days being similar 
    { 
     int index = 0; 
     while (index < birthMonthStats.length){ 
      System.out.println ("Month number " + (index+1) + " has " + birthMonthStats[index] + " people"); 
      index++; 
     } 
    } 
} 
+0

今、どの月が最も人気があるのか​​を見たいと思ったら、どうすればいいのですか? iveはpublic void mostPopularMonth()を使用していますが、次にどこから始めるべきかわかりません – Stevo4586

+0

'birthMonthStats'をループして最大値を探し、それを見つけたインデックスを保存してください。それはあなたの月です – rakwaht

関連する問題