我仍然不明白何时以及为什么应该使用"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一无所知!!!
当您在方法中声明一个变量时,它会在方法结束时死亡(除非您返回它(。当然你应该注意";"混叠";,但事实并非如此。
您的要求非常明确:您的方法必须修改输入,而不是创建新列表。
你不明白为什么你不必创建一个新对象。有人给了你一个错误的建议:(
现在由您来迭代列表并在正确的位置插入整数:(