首页 > 解决方案 > 将对象添加到链表

问题描述

我需要实现 2 种方法的组合,将 wagon 对象添加到 wagon 的链表中。但我不明白如何构建它。每个 wagon 对象都有一个引用下一个 wagon 的属性(开始时为 null)。所以我想我必须在添加新货车时更改该参考。但是我怎么知道在哪里以及如何添加货车以及我如何在其他 2 人之间获得货车......如果可以添加火车是由公共方法检查但我如何实际添加带有辅助方法的火车? 还是我真的把它放在机车类?

我不能把危险品=真正的货车和客运车放在一起,客运车总是在火车的起点

package edu.hm.cs.swe2.trains;

public class Wagon {

    private int wagonNumber;
    private boolean isPassengerWagon;
    private boolean carriesDangerousGoods;
    public Wagon nextWagon;

    public Wagon(boolean isPassengerWagon, boolean carriesDangerousGoods) {
        if (isPassengerWagon == true && carriesDangerousGoods == true) {
            this.carriesDangerousGoods = false;
            System.out.println("passengerwagon cant handle dangerous goods");
        } else
            this.isPassengerWagon = isPassengerWagon;
        this.carriesDangerousGoods = carriesDangerousGoods;
        this.setWagonNumber(0);
        this.setNextWagon(null);

    }

    public boolean isPassengerWagon() {
        return isPassengerWagon;
    }

    public boolean isCarriesDangerousGoods() {
        return carriesDangerousGoods;
    }

    public void setWagonNumber(int wagonNumber) {
        this.wagonNumber = wagonNumber;
    }

    public void setNextWagon(Wagon nextWagon) {
        this.nextWagon = nextWagon;
    }

    public void printWagon(int level) {
        if (level == 3) {
            if (nextWagon == null)
                System.out.println("**********");
        } else if (level == 2) {
            if (this.isPassengerWagon == false && this.carriesDangerousGoods == true) {
                System.out.println("* f" + this.wagonNumber + " dg *");
            } else if (this.isPassengerWagon == false && this.carriesDangerousGoods == false) {
                System.out.println("* f" + this.wagonNumber + "    *");
            } else if (this.isPassengerWagon == true) {
                System.out.println("* p" + this.wagonNumber + "    *");
            }
        } else if (level == 1) {
            System.out.println("**********->");
        } else if (level == 0) {
            System.out.println(" ***  *** ");
        }

    }

    public boolean trainCarriesDangerousGoods() {
        if (this.carriesDangerousGoods == true) {
            return true;
        } else if (this.nextWagon == null) {
            return false;
        } else {
            return nextWagon.trainCarriesDangerousGoods();
        }
    }

    public boolean trainHasPassengerWagons() {
        if (this.isPassengerWagon == true) {
            return true;
        } else if (this.nextWagon == null) {
            return false;
        } else {
            return nextWagon.trainHasPassengerWagons();
        }
    }

    public Wagon addWagon(Wagon newWagon) {
        if (this.trainCarriesDangerousGoods() == true && newWagon.isPassengerWagon() == true) {
            System.out.println("cant add Passenger wagon to a train with dangerous goods");
        }
        if (newWagon.carriesDangerousGoods == true && this.trainHasPassengerWagons() == true) {
            System.out.println("cant add dangerous goods to a train with passengerwaggons");
        } else {
            addWagon(this.wagonNumber, newWagon);
        }
        return newWagon;

    }

    private void addWagon(int wagonNumber, Wagon newWagon) {

    }
}
package edu.hm.cs.swe2.trains;

public class Locomotive {

    public int locomotiveCount;
    public int steamLocomotiveCount;
    MotivePower Propulsion;

    public Locomotive(MotivePower Propulsion) {
        this.Propulsion = Propulsion;
        locomotiveCount++;
    }
}

标签: javarecursionlinked-list

解决方案


Wagon不应该指向下一个WagonNodeLinkedList<T>具有下一个指针以及其他指针的类中创建一个内部类。该类Node应类似于以下内容:

class Node  {
   T object;

   Node next;
   Node previous; // optional depending on linked list type.
}

LinkedList是类型Wagon
例如LinkedList<Wagon> list = new LinkedList<>();Wagon实例将被放置在object节点的字段中。


推荐阅读