2013-02-18 69 views
-1

这是在课堂上的作业,我在我的链接列表中使用我的车对象时遇到了问题。 汽车类有两个实例变量(make,price)。 我将如何将变量放入节点类中。如何使用Java中的对象创建链接列表。

public class CarList { 
private CarNode head = null; 
private CarNode tail = null; 
private int counter = 0; 

public CarList() { 
    head = null; 
} 

public int getSize() { 
    return counter; 
} 
public boolean isEmpty() { 
    if(counter < 1) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 
/**public CarNode firstNode() { 
    return head; 
} 
public CarNode lastNode() { 
    return tail; 
} 
public CarNode getNode(int target) { 
    CarNode pre; 
    pre = head; 

    while(pre.next != null) { 
     pre = pre.next; 

     if(pre.data == target) { 
      return pre; 
     } 

    } 
    return null; 
}**/ 
public void insert (String target) { 
    if(head==null || target < head.data) { 
     insert_at_head(target); 
    return; 
    } 
    CarNode pre = head; 

      while(pre.next != null && target > (pre.next).data) { 
       pre = pre.next; 

       CarNode newNode = new CarNode(target); 
       newNode.next = pre.next; 
       pre.next = newNode; 
    } 
} 
} 
//The CarNode Class 
class CarNode { 
Car data; 
CarNode next; 
CarNode pre; 

public CarNode(Car entry) { 
    this.data = entry; 
    next = null; 
    pre = null; 
} 

} 

//Car Class 

public class Car { 
int Price; 
String Make; 

public Car(int pennies, String m) { 
    this.Price = pennies; 
    this.Make = m; 
} 

public int getPrice() { 
    return Price; 
} 

public String getMake() { 
    return Make; 
} 

public void setPrice(int p) { 
    Price = p; 
} 
public void setMake(String m) { 
    Make = m; 
} 
} 

回答

2

我不明白您的插入方法

public void insert (String target) { 
    if(head==null || target < head.data) { 
    insert_at_head(target); 
    return; 
    } 
    CarNode pre = head; 

    while(pre.next != null && target > (pre.next).data) { 
     pre = pre.next; 
     CarNode newNode = new CarNode(target); 
     newNode.next = pre.next; 
     pre.next = newNode; 
    } 
} 

我认为这将是:

public void insert (Car target) { 
    if(head==null || target.compare(head.data)<0) { 
    insert_at_head(target); 
    }else{ 
    CarNode pre = head; 
    while(pre.next != null && target.compare((pre.next).data)>0) { 
     pre = pre.next; 
     CarNode newNode = new CarNode(target); 
     newNode.next = pre.next; 
     pre.next = newNode; 
    } 
    } 
} 

比你必须创建在汽车类int compare(Car other)方法。

0

您不必将变量makeprice“放置”到CarNode类中,但是您可以在您的汽车类中使用getter和setter方法在您的节点类中使用。

因此,如果您在已经创建(实例化)的Node类中使用了Car对象,那么您可以使用像这样的getter和setter方法。

因此,在CarNode类中,让我们创建一辆汽车并获取该数据。

this.data.getPrice(); 

this.data.getMake(); 
0

由于Java是开源的,你有一个炉排机会看一看实现LinkedList自带的Java集合框架的一部分。并以类似的方式实施它。

0

insert方法看起来不对我。我相信你试图插入Car这样的链表按升序排列。你可以这样做:

public void insert (String target) { 
    counter++; 
    if(head==null || target < head.data) { 
    insert_at_head(target); 
    }else{ 
    /* trying to find position such that cur is greater than target */ 
    CarNode pre = head, cur = head.next; 
    while(cur != null && cur.data < target) { 
     pre = cur; 
     cur = cur.next; 
    } 

    /* now insert element between pre and cur */ 
    /* if cur is end then you might reach the end of list */ 
    CarNode c = new CarNode(target); 
    pre.next = c; 
    c.next = cur; 
    if(c.next == null) 
     tail = c; 
    } 
} 
+0

这会不会与我insert_at_head方法工作 公共无效insert_at_head(汽车数据){ \t \t CarNode临时=新CarNode(数据); \t \t temp.next = head; \t \t head = temp; \t} – user2084799 2013-02-18 22:19:26

+0

这是直接从您的代码。只有我改变的部分在'else'中。 – Shivam 2013-02-18 22:33:02