Java:计算数据出现在类中的次数

时间:2014-10-22 07:08:29

标签: java class

我知道如何计算大多数关于Java的东西,但这要么让我感到困惑,要么我的大脑正在死亡。无论如何,我有一个名为“Jobs”的类,并且在该类中是一个名为“day”的String变量。已经创建了多个新作业(具体数字未知),现在我需要查询并查明x天有多少作业。我认为使用while循环会很容易,但我不知道如何创建一个整体看待Jobs而不是一个特定的那个。

通过扫描程序读取文件(其名称为jobFile)来创建作业数据。

public class Job_16997761 {

  private int jobID;             // unique job identification number
  private int customerID;        // unique customer identification number
  private String registration;   // registration number for vehicle for this job
  private String date;           // when the job is carried out by mechanic
  private String day;            // day of the week that job is booked for
  private double totalFee;       // total price for the Job
  private int[] serviceCode;     // the service codes to be carried out on the vehicle for the job

  //Constructor
  public Job_16997761(int jobID, int customerID, String registration, 
          String date, String day, double totalFee, int[] serviceCode) {
      this.jobID = jobID;
      this.customerID = customerID;
      this.registration = registration;
      this.date = date;
      this.day = day;
      this.totalFee = totalFee;
      this.serviceCode = serviceCode;
  }

3 个答案:

答案 0 :(得分:1)

不确定为什么要创建作业的动态实例(例如,Job_16997761,似乎每个作业都有自己的类)。但是在创建作业时,您可以维护一张每天都有作业数量的地图。类似的东西:

Map<String, Long> jobsPerDay=new HashMap<String,Long>();

然后在创建新工作时,您可以简单地增加每天的计数器:

jobsPerDay.put(day,jobsPerDay.get(day)!=null?jobsPerDay.get(day)++:1);

通过这种方式,您可以使用以下内容获取一天的工作数量:jobsPerDay.get(day)

请注意,您可以使用java.time.DayOfWeek代替String

答案 1 :(得分:0)

这只是众多方式中的一种,可能效率不高,但这是您可以考虑的一种方式(编辑上一篇文章之前)。使用arrayList包含所有Job对象并遍历对象。

import java.util.*;

public class SomeClass {

    public static void main(String[] args) 
    {
        Jobs job1 = new Jobs(1);
        Jobs job2 = new Jobs(1);
        Jobs job3 = new Jobs(2);
        Jobs job4 = new Jobs(2);
        Jobs job5 = new Jobs(2);                                

        ArrayList<Jobs> jobList = new ArrayList<Jobs>();
        jobList.add(job1);
        jobList.add(job2);
        jobList.add(job3);
        jobList.add(job4);
        jobList.add(job5);

        System.out.println(numOfJobOnDayX(jobList, 2)); //Jobs which falls on day 2
    }

    public static int numOfJobOnDayX(ArrayList<Jobs> jobList, int specifiedDay)
    {
        int count=0;
        for(int x=0; x<jobList.size(); x++) //May use a for-each loop instead
            if(jobList.get(x).days == specifiedDay)
                count ++;
        return count;                   
    }   
} 

输出: 3

职业班..

class Jobs
{
    int days;       
    public Jobs(int days)
    {
        this.days = days;
    }   
}

为简单起见,我没有使用任何getter和setter方法。您可能想要考虑要用于保存对象的数据结构。再一次,我需要再次强调这可能不是一种有效的方式,但它为你提供了一些计算的可能性。

答案 2 :(得分:0)

除非您提供更多详细信息,否则很难告诉您正确的解决方案。你说你可以写while循环,所以我假设你已经收集了Job

int count = 0;
List<Job> jobs = readJobsFromFile();
for(Job job : jobs) {
    if(job.getDay().equals(inputDay)){ //inputDay is day you have to find number of jobs on.
       count++;
    }
}

System.out.Println(count);