3 回答

TA貢獻(xiàn)1799條經(jīng)驗 獲得超9個贊
因為a
并且b
因為它們沒有依賴性,所以hasDependency()
調(diào)用 returns false
,因此它們只是被添加到orderedJobsArrayList
對于c
,您再次擁有依賴項本身c
,從第一次if
檢查開始,它也被添加到列表中,因為列表不包含名稱Job
和"c"
依賴項變量,然后isReflexive(job, job.getDependency())
調(diào)用返回一個true
,因為c.getName().equals(c.getName()) == true
,但是您的if
條件有返回值的否定,因此它不會繼續(xù)到算法的底部。
a, b, c
中的結(jié)果orderedJobsArrayList
是正確的。

TA貢獻(xiàn)1906條經(jīng)驗 獲得超10個贊
無論任何依賴條件如何,您都將所有作業(yè)添加到有序列表中: if (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
您是否使用調(diào)試器查看它是否通過了 IsReflexive 測試?事實上,a, b, c, c
如果不是,你會得到。

TA貢獻(xiàn)1784條經(jīng)驗 獲得超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-
根據(jù)您的實施,輸出 a、b、c 是完美的,因為您已將所有工作添加到列表中,即
如果 (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
在作業(yè)c 的情況下,條件if(!isReflexive(job, job.getDependency())) 的計算結(jié)果為 false ,因此您應(yīng)該從列表中刪除該作業(yè)。
添加回答
舉報