我正在构建一个indexOf 方法。
它返回对象的索引。
public int indexOf(Token obj) {
int store = 0;
int tempIndex = 0;
Node nodeRef = head;
while(nodeRef.next != null ){
tempIndex++;
if(obj.equals(nodeRef.getObject())){
store = tempIndex;
}
nodeRef = nodeRef.next;
}
System.out.println("Index");
return store;
}
我的问题是它没有查看最后一个对象,因为最后一个对象 .next 引用是空的(自然)。我可以看到问题,但解决方案暗示了我。我尝试添加类似的东西;
if(nodeRef.next == null && obj.equals(nodeRef.getObject())){
tempIndex++;
store = nodeRef.next
}
不过似乎没有帮助。
任何帮助将不胜感激。
将循环条件更改为
while(nodeRef != null ){
这应该基本上可以解决它。
如果您对更简单的解决方案感兴趣,请查看此示例代码。也许你会发现一些有用的东西:
public static void main(String[] args) {
Node head = new Node();
head.addNext().addNext().addNext();
Node node = head;
while (node != null) {
System.out.printf("Index of node no. [%d] is [%d]n", node.no, indexOf(head, node));
node = node.next;
}
}
public static int indexOf(Node head, Node node) {
Node cursor = head;
for (int index = 0; cursor != null; index++) {
if (cursor.equals(node)) return index;
cursor = cursor.next;
}
throw new IllegalArgumentException(String.format("Node with no [%d] not member of chain", node.no));
}
class Node {
Node next = null;
final int no;
Node() {
this.no = 0;
}
private Node(Node parent) {
this.no = parent.no + 1;
}
Node addNext() {
this.next = new Node(this);
return this.next;
}
}