在对指定的LinkedList进行迭代时理解OOP



我仍然不明白何时以及为什么应该使用"Obj Obj=新的Obj";我不明白为什么这对我来说如此困难。在这个任务中,我需要创建一个方法,如下所示:

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

public static void insertSorted(LinkedList<Integer> list, int value) {
/* IMPLEMENT THIS METHOD! */
}

更不用说迭代LinkedList列表的所有复杂问题了,我甚至不知道如何开始。我应该创建一个新的LinkedList<Integer> newList = new LinkedList<Integer>();,这样我就可以对它进行迭代吗?为什么?如果列表是在方法签名中给出的,那么我是否应该假设当方法签名中提供输入时,对象已经创建?我真的很困惑。我似乎不能完全理解对象编程的全部内容。

Obj obj = new Obj

好吧,如果你想在一行中理解新的关键词,它就像内存区中的一个契约,你可以在那里存储数据(这还不够开始(。

public static void insertSorted(LinkedList<Integer> list, int value) {
/* IMPLEMENT THIS METHOD! */
}

现在对于这个方法,您不想创建任何新对象。

Q。为什么?

Ans-当这个方法被调用时,必须将一些参数传递给该方法,否则将是编译时错误。

传递值可能为null。

由于该方法返回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,你会看到该列表";列表";保持方法开始时的状态(即(1,2,5((;list2";将是(1,2,4,5(。

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

当您在方法中声明一个变量时,它会在方法结束时死亡(除非您返回它(。当然你应该注意";"混叠";,但事实并非如此。

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

你不明白为什么你不必创建一个新对象。有人给了你一个错误的建议:(

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

相关内容

  • 没有找到相关文章

最新更新