我需要帮助获取一个类的ArrayList元素并在另一个类中使用它。
该任务基本上是分配在Job类中输入的任务,该任务放在JobQueue类的arraylist中。我现在面临的问题是,我有一个持续时间作为Job类中每个任务的整数,并且我试图获得在JobQueue类中使用的总持续时间,如果有超过1个任务被激活。
任务: - 获取Job类中作业的totalDuration,以便在JobQueue类中使用。
这是我到目前为止所拥有的。
//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.
答案 0 :(得分:2)
进行循环以获得总持续时间
public int getTotalDuration() {
int total = 0;
for(Job job : myJobs) {
total += job.getDuration();
}
return total;
}
答案 1 :(得分:1)
除非我误解了目的,否则我认为totalDuration
类不应该有JobQueue
属性。相反,创建一个名为getTotalDuration
的方法,让它循环遍历Job
属性中的所有myJob
,将每个Job
个jobDuration
相加}。
public int getTotalDuration() {
int totalDuration = 0;
for (Job job : this.myJobs) {
totalDuration += job.getDuration();
}
return totalDuration;
}
答案 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; }
但是,随着代码复杂性的增加,通常会越来越难以保持总持续时间不变,并且有一个突破点,你必须非常清楚你真的需要它的速度优势。
答案 3 :(得分:1)
如果您想要作业列表中所有作业的总持续时间,只需循环遍历ArrayList并总结每个单独任务的持续时间:
public int getDuration()
{
int totalDuration = 0;
for (Job job : myJobs)
{
totalDuration += job.getDuration();
}
return totalDuration;
}
请注意,这是解决问题的简单方法,因为还有其他一些注意事项可能对您很重要。例如,如果作业名称是唯一的,您可能希望在遇到重复的作业名称时执行特殊操作。例如,如果要忽略重复项,则可以保留已经遇到过的名称哈希集。在任何情况下,您都需要确定此方案的所需行为。
答案 4 :(得分:1)
public int getDuration(){
int totalDuration=0;
for(Iterator<Job> it =myJobs.iterator(); it.hasNext(); ){
Job job = it.next();
totalDuration+=job.getDuration();
}
return totalDuration;
}
答案 5 :(得分:0)
for (Job job : getPendingJobs())
{
totalDuration += job.getDuration();
}
这就是全部
答案 6 :(得分:0)
遍历arraylist并总结每个作业实例的jobDuration。
for(Job j: jobList) {
//sum up all the durations here
}
答案 7 :(得分: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;
}
}
答案 8 :(得分:0)
更改add
方法
public void addJob(Job job)
{
myJobs.add(job);
totalDuration += job.getDuration();
}
现在您只需要getTotalDuration()
方法返回totalDuration.
您还需要减去已删除的作业。
public void getTotalDuration() {
return totalDuration;
}