“if (l.head.item != 9
”行给了我错误,它说像object这样的东西与int不兼容。我真的很困惑,为什么会这样?怎么解决?
/ DListNode1 /
/* DListNode1.java */
public class DListNode1 {
public Object item;
// public short[][] colorVal;
public DListNode1 prev;
public DListNode1 next;
DListNode1() {
item = 0;
prev = null;
next = null;
}
DListNode1(Object i) {
item = i;
prev = null;
next = null;
}
}
//////////////
/* Double linked list */
public class DList1 {
protected DListNode1 head;
protected DListNode1 tail;
protected long size;
public DList1() {
head = null;
tail = null;
size = 0;
}
public DList1(Object a) {
head = new DListNode1();
tail = head;
head.item = a;
size = 1;
}
public DList1(Object a, Object b) {
head = new DListNode1();
head.item = a;
tail = new DListNode1();
tail.item = b;
head.next = tail;
tail.prev = head;
size = 2;
}
public void insertFront(Object i) {
DListNode1 temp = new DListNode1(i);
if (size == 0) {
head = temp;
tail = temp;
}
else {
temp.next = head;
head.prev = temp;
head = temp;
} size++;
}
public void removeFront() {
if (size == 0) {
return;
}
else if (size == 1) {
head = null;
tail = null;
size--;
}
else {
head = head.next;
head.prev = null;
size--;
}
}
public String toString() {
String result = "[ ";
DListNode1 current = head;
while (current != null) {
result = result + current.item + " ";
current = current.next;
}
return result + "]";
}
/////////////
public static void main(String[] args) {
DList1 l = new DList1();
l.insertFront(9);
if (l.head.item != 9) {
System.out.println("head.item is wrong.");
答案 0 :(得分:1)
正如其他人所指出的那样,问题是l.head.item
的类型为Object
,您无法使用int
或!=
将其与==
进行比较{1}}。
选项:
将l.head.item
投放到Integer
或int
:
// This could be done in one step if you wanted
int headValue = (int) l.head.item;
if (headValue != 9)
或者
// This could be done in one step if you wanted
Integer headValue = (Integer) l.head.item;
if (headValue != 9)
或者你可以内联:
if ((int) l.head.item != 9)
请改为使用equals
,这会自动将int
列入Integer
。
if (!head.equals(9))
让你的类型变得通用,所以你有一个DListNode1<Integer>
,然后你就可以确定所有节点值都是Integer
个引用(或null)和{{ 1}}检查会自动将!=
取消打包到Integer
并正常工作。
就我个人而言,我肯定会把它变成通用的,但我的猜测是你对Java相对较新的,可能还不想从泛型开始。
请注意,使用int
和执行取消装箱之间存在差异:如果equals
的值是对非l.head.item
对象的引用,则第一种方法将抛出{ {1}},第二个将进入Integer
语句的主体(例如,字符串不等于9)。哪个更好取决于你在更大的程序中想要实现的目标:如果你的列表包含非整数是完全合理的,你应该使用ClassCastException
检查;如果它实际上表明编程错误,那么最好是例外,因为它会更快地提醒您错误,并阻止程序继续进行无效的假设。
如果if
为equals
,则两种情况都会得到l.head.item
。这可以使用以下方式“修复”:
null
...但是,如果值为null,则取决于您希望代码执行的操作。
答案 1 :(得分:0)
因为DListNode1.item
是对象而不是整数。尝试转换为Integer
并与Integer (9)
答案 2 :(得分:0)
使用等于方法进行比较。'=='将比较参考。
if(l.head.item.equals(new Integer(9))==false)
答案 3 :(得分:-1)
它会给你错误,因为int是原始的:
Incompatible operand types Object and int
将您的代码更改为:
if (!l.head.item.equals(new Integer(9))) {
希望这有帮助。