我是编程的初学者,我遇到了链接迭代的麻烦。如果我们有通常的数组:
String[] array = new String[10];
...我们可以根据索引循环迭代,我的意思是,我们可以创建一个for
循环:
for(int index = 0; index < array.length; index++) {
//some action
}
但是如果我们有一个对象引用另一个对象?例如:
public class Node {
private int value;
private Node next;
public Node(int value, Node next) {
this.value = value;
this.next = next;
}
public int sum(Node start) {
return start.value + start.next.value + start.next.next.value + start.next.next.next.value;
}
public static void main(String[] args) {
Node node4 = new Node(1, null);
Node node3 = new Node(1, node4);
Node node2 = new Node(1, node3);
Node node1 = new Node(1, node2);
System.out.print(new Node(0, null).sum(node1));
}
}
在此代码中,我有一个非常糟糕的方法,尝试计算所有value
的所有Nodes
字段的总和。毫无疑问,我们需要在sum(Node start)
中进行迭代,但如果有参考而不是索引,如何实现呢?
答案 0 :(得分:1)
一种方法是使用简单的while循环。
public int sum(Node start) {
Node temp = start;
int result = 0;
while(temp != null){
result += temp.value;
temp = temp.next;
}
return result;
}
另一种方法:
public int sum(Node start){
int result = 0;
for(Node temp = start; temp != null; temp = temp.next) result += temp.value;
return result;
}
答案 1 :(得分:0)
你不需要迭代你总结value + next.sum()
所以下一个节点将返回value + next.sum()
,所以继续......
但你必须验证之前是否存在下一个引用。
所以你的方法总和将会看到这个:
public int sum() {
return value + (next != null ? next.sum() : 0)
}
答案 2 :(得分:0)
正如我在评论中所建议的那样,我将提供一个迭代器,并为每个循环使用一个迭代它。对于像这样的简单任务来说,这似乎有点太多了,但它会让你的未来工作变得更加容易。
基本思想是:您实现接口Iterator以允许迭代您的节点。然后,让SET tmp="C:\Users\Marc\Desktop\Tempo"
SET exe="C:\Users\Marc\Desktop\script\7zip\7za.exe"
SET dst="C:\Users\Marc\Desktop\Final\tmp.7z"
%exe% "a -t7z %dst% %tmp% -r"
实现Iterable以允许在节点上使用a for each语句。完整的代码看起来类似于:
Node
询问我是否应该提供有关迭代器的更多信息(或者只是谷歌)。此外,您使用的概念称为“链接列表”,搜索此信息以获取更多信息。