2014-02-20 54 views
0
/* 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 class num{ 
    public int j; 
    public num() { 
     this.j = 34; 
    } 
    } 
public class testing{ 
    private DList1 dli; 
    private num n; 

    public testing(){ 
    dli = new DList1(); 
    n = new num(); 
    dli.insertFront(n);} 
     public static void main(String[] args) { 
      testing Jimmy = new testing(); 
      System.out.printf(" this should be 34 %d\n",Jimmy.dli.head.item.j);// dont' work. 
     } 
    } 

谁能告诉我为什么我不能做Jimmy.dli.head.item.j?它非常有意义,但它说“j不能解决或不是领域”。如何修复它以便打印34?没有这一行“dli.insertFront(n.j);”传递对象到DLIST

+1

反正谁是'吉米'? o.O – Smutje

+0

'item'的类型是'Object','Object'没有名为'j'的字段 –

+0

item是正确的?不是n.j = 34? – user3331457

回答

0

item are num right?不是n.j = 34

是的,您已创建一个num对象并将其指定给item。然而,item仅是对numObject部分的参考 - 因此,通过此参考,您只能访问那些属于Object超类的成员(num隐含地从Object继承)。

有没有办法访问34?

是的,你可以Jimmy.dli.head.itemnum访问j成员,像((num)Jimmy.dli.head.item).j

但是,要实现这个正确的方法是让DListNode1DList1通用而不是使用Object作为项目元素:

public class DListNode1 <T> { 
    public T item; 
    ... 

public class DList1 <T> { 
    protected DListNode1<T> head; 
    protected DListNode1<T> tail; 
    ... 

无论您使用的是您的DListNode1DList1Object,使用T现在。

然后,您可以实例化一个类型安全DList1

DList1<num> dli = new DList1<>(); 

由于item现在num型的,而不是Object,你可以像你打算访问它j元素:

System.out.printf(" this should be 34 %d\n",Jimmy.dli.head.item.j); 

另见The Java Tutorials, Lesson: Generics

顺便说一句,你应该习惯于Code Conventions for the Java Programming Language - 例如类名称应以大写字母(Testing而不是testing,Num而不是num)开头。

+0

所以在我应该使用T的方法呢?类似于公共Dlist1(T a,T b){} 或insertFront(T i){}虽然 在初始化DListNode(){item = 0;}它说像int这样的东西不能转换为T. – user3331457

+0

是的,确切地说。并且使用'null'而不是'0'(0在你的情况下工作,因为它被自动装入一个'Integer'对象中) –