【问题标题】:Passing object to next element in linked list将对象传递给链表中的下一个元素
【发布时间】:2015-04-28 18:55:01
【问题描述】:

我创建了一个 arrayList treat 来显示治疗室的 5 个实例,我还创建了一个linkedList inTreatment 用于治疗室将 5 个患者对象从 queue 传递到,但是当我传递多个对象时对于linkedList,它们会不断替换添加的第一个元素,而不是移动到下一个可用元素。我相信问题在于inTreatment.add 行,但我不确定如何引用下一个可用索引。所有建议都非常受欢迎。 下面是我创建数组并添加到inTreatmentlinkedList 的代码。

创建治疗室数组

public static void createTreatmentRooms() {
    for (int i = 0; i < treat.length; i++) {
        treat[i] = new TreatmentRoom();
        treat[i].setAvailable(true);
    }
}

添加到治疗室方法

for (int i = 0; i < TreatmentRoom.treat.length; i++) {

        if ((TreatmentRoom.treat[i].isAvailable())
                && (Queue.queue.size() != 0)
                && (Queue.queue.getFirst().getTriage() != Status.NOT_ASSESSED)) {

            // add patient to inTreatment list for future sorting...
            inTreatment.add(queue.getFirst());
            System.out.println("taken to treatment queue");
            // remove patient from front of queue
            for (Patient p : queue) {
                System.out.println(p.getFirstName());
            }
            queue.poll();
            System.out.println("second queue");
            for (Patient p : queue) {
                System.out.println(p.getFirstName());
            }
            System.out.println("removed from queue");

            // if free, add patient to treatment room
            TreatmentRoom.treat[i].setPatient(inTreatment.getFirst());
            System.out.println("sent to treatment room"
                    + TreatmentRoom.treat[i]);

            // System.out.println("patient added" +
            // queue.get(i).getFirstName());
            // set treatment room to unavailable
            TreatmentRoom.treat[i].setAvailable(false);
            System.out.println("treatment room busy");

        } else {
            System.out.println("Treatment room is not available");

        }

    }
}

【问题讨论】:

  • 你试过在调试模式下完成它吗?
  • @ChrisBolton 我对 java 比较陌生,还没有涉及调试,所以我不确定从哪里开始
  • 你在用eclipse吗?
  • 是的,克里斯,我正在使用 eclipse
  • @cg91,这只是一个练习还是您打算在现实生活中使用此代码? --- java 提供了内置的数据结构,如 Queue/maps/set -- 集合 .. 我鼓励您使用这些.. 通常它们经过充分测试并且没有错误 - 提供了开箱即用的大部分功能。

标签: java arrays linked-list


【解决方案1】:

问题可能来自这里:

queue.remove(i);

您正在删除索引 i 处的元素,但 i 在房间范围内,与队列无关,是吗?

您可能希望删除第一个元素。

旁注:应该有一个 poll() 方法,顺便说一下,允许您在一次调用中查看并删除队列的第一个元素,但我不确定是什么你在这里使用的队列类型,它看起来不像 java.util.Queue。

【讨论】:

  • queue 是另一个链接列表,我从中调用患者对象。是的,我看到queue.remove(i) 不正确,我已经更改了它,但问题仍然存在,我需要使用inTreatment.add 方法更改什么吗?
  • 你能用你的改变更新你的代码吗?仅供参考,inTreatment.add() 会将您的元素添加到列表的末尾,这没有问题。如果您仍然使用 java 标准库,您可能需要考虑使用java.util.Queue 作为您的队列;-)
  • poll() 实际上也存在于LinkedList 上,仅供参考;-)
  • 代码已更新,此时inTreatment.add 方法正在将先前添加的患者对象替换为linkedList 相同索引中的新对象,是否有任何原因会发生这种情况?
  • 你怎么知道的?你怎么看?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2017-06-03
  • 2012-03-08
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多