3 回答
TA贡献1799条经验 获得超9个赞
因为a
并且b
因为它们没有依赖性,所以hasDependency()
调用 returns false
,因此它们只是被添加到orderedJobsArrayList
对于c
,您再次拥有依赖项本身c
,从第一次if
检查开始,它也被添加到列表中,因为列表不包含名称Job
和"c"
依赖项变量,然后isReflexive(job, job.getDependency())
调用返回一个true
,因为c.getName().equals(c.getName()) == true
,但是您的if
条件有返回值的否定,因此它不会继续到算法的底部。
a, b, c
中的结果orderedJobsArrayList
是正确的。
TA贡献1906条经验 获得超10个赞
无论任何依赖条件如何,您都将所有作业添加到有序列表中: if (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
您是否使用调试器查看它是否通过了 IsReflexive 测试?事实上,a, b, c, c
如果不是,你会得到。
TA贡献1784条经验 获得超8个赞
import java.util.ArrayList;
class JobSequence {
private ArrayList<Job> jobsArrayList;
private ArrayList<Job> orderedJobsArrayList = new ArrayList<>();
JobSequence(ArrayList<Job> jobsArrayList) {
this.jobsArrayList = jobsArrayList;
}
void sortByDependency() {
for (Job job : jobsArrayList) {
if (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
if (job.hasDependency()) {
if (!isReflexive(job, job.getDependency())) {
if (!orderedJobsArrayList.contains(job.getDependency())) {
int index = orderedJobsArrayList.indexOf(job);
orderedJobsArrayList.set(index, job.getDependency());
orderedJobsArrayList.add(index + 1, job);
}
}else {
orderedJobsArrayList.remove(job);
}
}
}
}
private boolean isReflexive(Job i, Job j) {
return i.getName().equals(j.getName());
}
public ArrayList<Job> getOrderedJobsArrayList() {
return orderedJobsArrayList;
}
public void setOrderedJobsArrayList(ArrayList<Job> orderedJobsArrayList) {
this.orderedJobsArrayList = orderedJobsArrayList;
}
}
Try this-
根据您的实施,输出 a、b、c 是完美的,因为您已将所有工作添加到列表中,即
如果 (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
在作业c 的情况下,条件if(!isReflexive(job, job.getDependency())) 的计算结果为 false ,因此您应该从列表中删除该作业。
添加回答
举报