嗨,对于我的项目,我正在尝试删除该项的所有出现,并返回已删除的项数。所有后续项都将向左移动,如果找不到该项,此方法将返回0。
这是我的代码:
public class LinkedList<T> implements LinkedListInterface<T> {
private Node head;
private Node tail;
private int count;
public LinkedList() {
head = null;
tail = null;
count = 0;
}
class Node {
T data;
Node next;
Node(T data) {
this.data = data;
next = null;
}
}
public Node getHead() {
return head;
}
public int contains(T item) {
Node nd = this.head;
for (int pos = 1; pos <= count; pos++) {
if (nd.data == item) {
return pos;
}
nd = nd.next;
}
return 0;
}
public T remove(int pos) throws ListException {
if (pos < 1 || pos > count) {
throw new ListException("Invalid position to remove from");
}
Node removedItem = null;
if (count == 1) {
removedItem = head;
head = null;
tail = null;
}
else if (pos == 1) {
removedItem = head;
head = head.next;
}
else if (pos == count) {
removedItem = tail;
Node prev = jump(pos - 2);
prev.next = null;
tail = prev;
}
else {
Node prev = jump(pos - 2);
removedItem = prev.next;
prev.next = prev.next.next;
}
count--;
return removedItem.data;
}
public int remove(T item) {
Node numRemoved = 0;
let pos = -1; // cannot find symbol
while ((pos = contains(item)) > 0) {
remove(pos);
numRemoved++; // bad operand type LinkedList<T>.Node for unary operator '++'
}
return numRemoved; // LinkedList<T>.Node cannot be converted to int
}
public void replace(T item, int pos) throws ListException {
if (pos < 1 || pos > count + 1) {
throw new ListException("Invalid position to insert at");
}
}
}
在…之下。。。
public int remove(T item) {
Node numRemoved = 0;
let pos = -1; // cannot find symbol
while ((pos = contains(item)) > 0) {
remove(pos);
numRemoved++; // bad operand type LinkedList<T>.Node for unary operator '++'
}
return numRemoved; // LinkedList<T>.Node cannot be converted to int
}
我放了一条包含错误的评论行,我试图修复的一些事情不是
let pos = -1
我放了
int pos = -1;
但它让我的while循环也出现了错误。我认为这可能与变量numRemoved和pos的数据类型声明有关。也有一个错误的操作数类型
numRemoved++
有关于如何修复的想法吗?非常感谢。
你好,更新,下面是:
public int remove(T item) {
int numRemoved = 0;
int pos = -1;
try {
while ((pos = contains(item)) > 0) {
remove(pos);
numRemoved++;
}
} catch (ListException e){
System.out.print(e);
}
return numRemoved;
}
然而,当我测试它时,我的程序中任何匹配的名称都无法删除,原因是什么?
Java中没有像"let"这样的关键字正如您所发现的,int是适当的声明。
while语句本身没有错,它是循环体中的一个语句。这一点非常清楚——不能将"++"运算符应用于节点。该运算符用于递增整数值。您希望它在节点上做什么?或者,等价地说,当"numRemoved"显然应该计数时,为什么要将其声明为Nodeint’在这里是合适的。
此外,你说修复第一个错误";使我的while循环也有错误";。通常情况下,一些错误会阻止编译器进行后续分析(已知代码是错误的(,因此在修复已知问题之前,不会看到其他错误。