3

あるクラスのArrayListの要素を取得し、それを別のクラスで使用するには、助けが必要です。

タスクは基本的に、JobQueueクラスの配列リストに配置されたJobクラスに入力されたタスクを割り当てます。現時点での問題は、Jobクラス内の各タスクの期間が整数であり、複数のタスクが実行されている場合にJobQueueクラスで使用される合計期間を取得しようとしていることです。

タスク:-JobQueueクラス内で使用されるJobクラスのジョブのtotalDurationを取得します。

これが私がこれまでに持っているものです。

//first class that contains jobs created.
public class Job
{  
//fields  
private String jobName;
private int jobDuration;
private static final int DEFAULT_DURATION = 0;

public Job(String task, int duration)
{
    //constructor used to create the job name and how long it will take to do one job (duration).
    jobName = task;
    if (duration > DEFAULT_DURATION)
    {
        jobDuration = duration;
    }
    else
    {
        jobDuration = DEFAULT_DURATION;            
    }
}
public String getName()
{
    return jobName;
}

public int getDuration()
{
    return jobDuration;
}
}

// 2nd class used to enter every job created into an Arraylist called myJobs.
public class JobQueue
{
private ArrayList <Job> myJobs;
private int totalDuration;
private static final int DEFAULT_NUM = 0;

public JobQueue()
{
    myJobs = new ArrayList<Job>();
    totalDuration = DEFAULT_NUM;
}
public ArrayList<Job> getPendingJobs()
{
    return myJobs;
}
public void addJob(Job job)
{
    myJobs.add(job);
}
}
//here i need a method that gets the total duration of jobs in the arraylist and returns total as an integer. Please help.
4

9 に答える 9

2

合計時間を取得するためにループを実行します

public int getTotalDuration() {
    int total = 0;
    for(Job job : myJobs) {
        total += job.getDuration();
    }
    return total;
}
于 2012-10-11T13:42:34.020 に答える
1

目的を誤解していない限り、クラスのtotalDurationプロパティを持つべきではないと思います。JobQueue代わりに、次のようなメソッドを作成し、プロパティ内のgetTotalDurationすべてJobの をループmyJobさせて、個々Jobのを合計しますjobDuration

public int getTotalDuration() {
    int totalDuration = 0;
    for (Job job : this.myJobs) {
        totalDuration += job.getDuration();
    }
    return totalDuration;
}
于 2012-10-11T13:42:09.427 に答える
1

これはあなたの方法であり、それほど重要ではありません:

int totalDuration() {
  int totalDuration = 0;
  for (Job j : myJobs) totalDuration += j.getDuration();
  return totalDuration;
}

totalDurationまた、キャッシュされた合計継続時間の値として表示されるプロパティもあります。これは、必要悪としてのみ導入する必要があります。これは、パフォーマンスの問題に気づいた場合の最適化です。そうでない場合は、プロパティを削除してください。現在の API (ジョブが追加されるだけ) を考えると、本当に必要な場合は、addJobメソッドを変更して合計値を維持できます。

public void addJob(Job job)
{
    myJobs.add(job);
    totalDuration += job.getDuration();
}

そして、合計期間を取得するために必要な方法は、

int totalDuration() { return totalDuration; }

ただし、コードの複雑さが増すにつれて、通常、総継続時間を不変に維持することはますます難しくなり、速度の利点が本当に必要であることを明確にする必要がある限界点があります。

于 2012-10-11T13:42:44.450 に答える
1
public int getDuration(){

    int totalDuration=0;

    for(Iterator<Job> it =myJobs.iterator(); it.hasNext(); ){
        Job job = it.next();
        totalDuration+=job.getDuration();
    }

    return totalDuration;

}
于 2012-10-11T13:50:11.553 に答える
1

ジョブ リスト内のすべてのジョブの合計期間が必要な場合は、単純に ArrayList をループして、個々のタスクの期間を合計します。

public int getDuration()
{
    int totalDuration = 0;
    for (Job job : myJobs)
    {
        totalDuration += job.getDuration();
    }
    return totalDuration;
}

他にも重要な考慮事項があるため、これは問題に対する単純化されたアプローチであることに注意してください。たとえば、ジョブ名が一意である場合、重複するジョブ名に遭遇したときに特別な動作を実行したい場合があります。たとえば、重複を無視したい場合は、既に遭遇した名前の HashSet を保持できます。いずれにせよ、このシナリオの望ましい動作を決定する必要があります。

于 2012-10-11T13:45:22.647 に答える
0
for (Job job : getPendingJobs())
{
    totalDuration += job.getDuration();
}

それで全部です

于 2012-10-11T13:43:04.480 に答える
0

arraylist を繰り返し処理し、各ジョブ インスタンスの jobDuration を合計します。

 for(Job j: jobList) {
      //sum up all the durations here
 }
于 2012-10-11T13:44:11.110 に答える
0

addやり方を変える

public void addJob(Job job)
{
    myJobs.add(job);
    totalDuration += job.getDuration();
}

これgetTotalDuration()で、返すだけの方法ができtotalDuration.ました。削除されたジョブも減算する必要があります。

public void getTotalDuration() {
    return totalDuration;
}
于 2012-10-11T13:49:34.877 に答える
0

これは役立つかもしれません。

//first class that contains jobs created.
public class Job {
    //fields  
    private String jobName;
    private int jobDuration;
    private static final int DEFAULT_DURATION = 0;
    JobQueue queue = new JobQueue(); // Intialize the object.. Now queue.myJobs = a new array list of jobs.

    public Job(String task, int duration) {
        //constructor used to create the job name and how long it will take to do one job (duration).
        jobName = task;
        if (duration > DEFAULT_DURATION)
        {
            jobDuration = duration;
        }
        else
        {
            jobDuration = DEFAULT_DURATION;            
        }

        queue.addJob(this);

    }
    public String getName() {
        return jobName;
    }

    public int getDuration() {
        return jobDuration;
    }
}

// 2nd class used to enter every job created into an Arraylist called myJobs.
public class JobQueue {
    private ArrayList <Job> myJobs;
    private int totalDuration = 0;
    private static final int DEFAULT_NUM = 0;

    public JobQueue() {
        myJobs = new ArrayList<Job>();
        totalDuration = DEFAULT_NUM;
    }
    public ArrayList<Job> getPendingJobs() {
        return myJobs;
    }
    public void addJob(Job job) {
        myJobs.add(job);
        totalDuration += job.getDuration(); // It would be easier instead of looping through it, just to add to the total duration when the job is added to the queue.
    }

    public void getTotalDuration() {
        return totalDuration;
    }
}
于 2012-10-11T13:46:24.600 に答える