2012-10-11 40 views
3

我需要帮助获取一个类的ArrayList的元素并在另一个类中使用它。从一个类的ArrayList中获取要用于另一个类的元素

该任务基本上是分配Job类中输入的任务,该类放置在JobQueue类的数组列表中。我现在的问题是我有一个持续时间作为Job类中每个任务的整数,并且我试图获得JobQueue类中使用的总持续时间,如果有超过1个任务。

任务: - 在JobQueue类中使用的Job类中获取作业的总运行时间。

这是我到目前为止。

//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. 
+2

它是队列迭代/循环您遇到的问题? –

回答

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; } 

然而,当你的代码的复杂性的增长,它通常变得越来越难以十个分量的总时间不变,有一个临界点,你必须非常清楚你真正需要它的速度优势。

+0

好点,但你也需要减去已删除工作的持续时间。 – logoff

+0

@logoff我没有注意到OP代码中的删除方法,我在我的答案中指出了这一点。 –

+0

这是真的!你已经指出了它。 – logoff

1

除非我误解的目的,我不认为你应该有一个totalDuration属性为JobQueue类。相反,创建一个名为getTotalDuration的方法,并让它循环遍历myJob属性中的所有Job,将每个单独的JobjobDuration相加。

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

做一个循环,以获得总持续时间

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

+1你赢得了速度竞赛,但是OP要求'Integer'结果,而不是'int' - 可能由于自动装箱并不重要 – Bohemian

+2

但是有一个错字,它应该是total + = .. .'而不是'result + = ...'。 – Koraktor

+1

@波希米亚人,他说'整数',而不是'整数'。 'int'是完美的响应,你不需要类包装来存储一个简单的整数。即使他说'整数',我也更喜欢'int'。 – logoff

0
for (Job job : getPendingJobs()) 
{ 
    totalDuration += job.getDuration(); 
} 

这是所有

0

迭代ArrayList和总结每个作业实例的jobDuration。

for(Job j: jobList) { 
     //sum up all the durations here 
} 
1

如果希望所有作业的作业列表中的总时间,只需通过ArrayList中环,总结每个人任务的持续时间:

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

注意,这是一个简单的解决问题的方法,因为还有其他考虑可能对您很重要。例如,如果作业名称是唯一的,则在遇到重复作业名称时可能需要执行特殊行为。例如,如果您想忽略重复项,您可以保留已经遇到的名称的HashSet。无论如何,您需要确定此场景的期望行为。

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; 
    } 
} 
0

更改您add方法

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

现在你有getTotalDuration()方法只是返回totalDuration.您将需要减去取出作业也。

public void getTotalDuration() { 
    return totalDuration; 
} 
1
public int getDuration(){ 

    int totalDuration=0; 

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

    return totalDuration; 

} 
相关问题