首页 > 解决方案 > 在遍历分配的 LinkedList 时理解 OOP

问题描述

我仍然不明白何时以及为什么要使用“Obj obj = new Obj”,我不明白为什么它对我来说如此困难。在这个作业中,我需要创建一个方法,如下所示:

"insertSorted:此方法假定输入的 LinkedList 已经按非降序排序(即,每个元素都大于或等于它之前的元素,并将输入的 int 值插入到列表的正确位置. 请注意,该方法不返回任何内容,而是修改输入 LinkedList 作为副作用。如果输入 LinkedList 为空,则此方法应该简单地终止。这是您开始使用的代码:

public static void insertSorted(LinkedList<Integer> list, int value) {

        /* IMPLEMENT THIS METHOD! */

    }

更不用说迭代 LinkedList 列表的所有复杂性了,我什至不知道如何开始。我应该创建一个新的LinkedList<Integer> newList = new LinkedList<Integer>();以便我可以迭代它吗?为什么呢?如果在方法签名中给出了列表,我应该假设在方法签名中给出输入时已经创建了 Object 吗?我真的很困惑。似乎我无法完全掌握对象编程的全部内容。

标签: javaooplinked-list

解决方案


由于该方法返回 void,您应该修改作为输入给出的列表。我会用一个例子告诉你为什么

public static void insertSorted(LinkedList<Integer> list, int value) {

    LinkedList<Integer> list2 = new LinkedList<Integer>(list); //this means you are creating a new list of integers called list 2 with the same elements of the list "list" in the same order
    //some code to add value to list2 maintaing the sorting
    //no return needed

}

您想在其他地方调用此方法

    LinkedList<Integer> list = new LinkedList<Integer>();

    list.Add(1);
    list.Add(2);
    list.Add(5);

    for (Integer i : list) System.out.println(i);
    //prints 1, 2 , 5
    insertSorted(list,4);
    for (Integer i : list) System.out.println(i);
    //still prints 1, 2 , 5!

如果现在您使用调试器运行此代码,并且在将值插入 list2 后立即中断方法 insertSorted,您将看到列表“list”保持在方法开始时的状态(即 (1,2, 5)) 并且列表“list2”将是 (1,2,4,5)。

但是调用者方法对list2一无所知!!!

当你在方法中声明一个变量时,它会在方法结束时死掉(除非你返回它)。当然你应该注意“别名”,但事实并非如此。

您的要求非常明确:您的方法必须修改输入而不是创建新列表。

您无法理解为什么要创建一个新对象只是因为您不必这样做。刚刚有人给了你一个错误的建议:)

现在由您来迭代列表并将整数插入正确的位置:)


推荐阅读