【发布时间】:2019-06-24 23:53:42
【问题描述】:
一个对象有一个String类型的name属性和一个对象本身相同类型的dependency属性。现在,如果我创建对象的一个实例并将相同的实例设置为依赖属性,那么通过将对象名称与依赖项名称进行比较来检查对象是否具有自反性在 if 语句中不起作用。
class Job {
private String name;
private Job dependency;
boolean hasDependency() {
return dependency != null;
}
//getter,setters
}
&
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);
}
}
}
}
}
private boolean isReflexive(Job i, Job j) {
return i.getName().equals(j.getName());
}
}
&
public class Main {
public static void main(String[] args) {
Job a = new Job("a");
Job b = new Job("b");
Job c = new Job("c");
a.setDependency(null);
b.setDependency(null);
c.setDependency(c);
ArrayList<Job> jobArrayList = new ArrayList<>();
Collections.addAll(jobArrayList, a, b, c);
JobSequence sequence = new JobSequence(jobArrayList);
sequence.sortByDependency();
sequence.getOrderedJobsArrayList().forEach(p -> System.out.println(p.getName()));
}
}
结果应该是 a,b 而不是 a,b,c
【问题讨论】:
-
你增加了三个工作,为什么要少呢?查看是否 (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
-
我们正在讨论 foreach 循环中的第一个 if 语句。 (方法 sortByDependency)
标签: java if-statement boolean