java - 在遍历分配的 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 吗?我真的很困惑。似乎我无法完全掌握对象编程的全部内容。
解决方案
由于该方法返回 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一无所知!!!
当你在方法中声明一个变量时,它会在方法结束时死掉(除非你返回它)。当然你应该注意“别名”,但事实并非如此。
您的要求非常明确:您的方法必须修改输入而不是创建新列表。
您无法理解为什么要创建一个新对象只是因为您不必这样做。刚刚有人给了你一个错误的建议:)
现在由您来迭代列表并将整数插入正确的位置:)
推荐阅读
- reactjs - 使用 react-hook-form 对条件元素进行 Jest 单元测试
- javascript - 模态弹出窗口未在 JavaScript Ajax 拦截上传递 iFormFile 数据
- css - 谷歌自动完成下拉位置问题
- node.js - 如何在我的节点 js 天气应用程序中忽略错误的地名
- reactjs - 如何使用反应测试库模拟 ResizeObserver 以在单元测试中工作
- c# - 有没有办法检查 ac# 类是否是 json 可序列化和可反序列化的
- javascript - 试图打开特定选项卡的弹出窗口
- angular - Ionic ,使用 ion-select 并尝试将值从子级传递给父级不起作用
- deep-learning - 使用面部标志作为输入的好方法
- python-3.x - 如何使用 django 3 在模型管理员的更改列表视图页面中上传文件来解决“app_list”的 NoReverseMatch 异常?