为了账号安全,请及时绑定邮箱和手机立即绑定

if 语句中不考虑布尔方法返回

if 语句中不考虑布尔方法返回

翻翻过去那场雪 2023-02-16 17:03:52
一个对象有一个 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
查看完整描述

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是正确的。


查看完整回答
反对 回复 2023-02-16
?
隔江千里

TA贡献1906条经验 获得超10个赞

无论任何依赖条件如何,您都将所有作业添加到有序列表中: if (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);

您是否使用调试器查看它是否通过了 IsReflexive 测试?事实上,a, b, c, c如果不是,你会得到。


查看完整回答
反对 回复 2023-02-16
?
青春有我

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 ,因此您应该从列表中删除该作业。


查看完整回答
反对 回复 2023-02-16
  • 3 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信