2015-04-07 99 views
1

我是一个初学Java程序员,我试图在一个链接列表中添加一个名为Person的选定对象到另一个名为Boat的实例类中包含的链接列表中。我可以选择我想要的两个对象,但我不知道如何将所选人员添加到所选船对象中的链接列表中。我已经包含人员和船类的详细信息来协助。添加一个实例到另一个实例的链表

我已经将代码剥离到最基本的要领来传达这个问题,如果更多的程序会协助,请让我知道。任何援助表示赞赏。如果我的问题不清楚,请让我知道,我会尝试重述这个问题。

以下是我目前使用的两种方法,以及船只存储的列表。我用'// !!'标记了关键区域

public class Base implements Serializable 
{ private LinkedList<Boat> boats = new LinkedList<Boat>(); 
    private Clients clients = new Clients(); 


    public Base(){ 

    } 
    // !! Here is where the boats are created 
    public void setup() 
    { boats.add(new Boat(1, "Ed", 2)); 
     boats.add(new Boat(2, "Fred", 7)); 
     boats.add(new Boat(3, "Freda", 5)); } 


    public void getBoat(Boat boat) { `// !! Boat has already been selected by another method` 

     boat.passengers(add(getPassenger(passenger))); `// !! This is where I try to add the Person object into the linked list of the Boat object, this is the line that generates errors.` 

    } 

    public Person getPassenger(Person passenger) { `// !! passenger has already been selected by another method` 

     return passenger; 
    } 

这里是船类

import java.io.*; 
import java.util.*; 

public class Boat implements Serializable 
{ 
    private LinkedList<Person> passengers = new LinkedList<Person>(); 


    public Boat() 
    { 

      } 
} 

这里是人类

import java.io.*; 
import java.text.*; 

public class Person implements Serializable 
{ private String name; 
    private int id; 
    private double cash = 100.00; 
    private int start = 0; 
    private int end = 0; 
    private double charge = 0; 

    public Person(String name, int id) 
    { this.name = name; 
     this.id = id + 100; } 
} 

回答

1

可以在Boat类中创建一个方法来做到这一点:

public class Boat implements Serializable { 
    private LinkedList<Person> passengers = new LinkedList<Person>(); 

    public Boat() { } 

    public void addPassenger(Person p) { 
     this.passengers.add(p); 
    } 
} 

然后你可以一个dd乘客通过将Person对象传递给addPassenger()。例如:

Boat boat = new Boat(); 
boat.addPassenger(new Person("Bob", 1)); 

不要在一个getter方法返回的旅客名单。这将破坏封装,因为其他班级将能够修改船的乘客名单,甚至清理它。

代码中还有一些问题。例如:

public Person getPassenger(Person passenger) { 
    return passenger; 
} 

此方法接收一个对象并返回相同的对象。它没有别的。你不需要它。

您的getBoat()方法收到Boat作为参数,但在其中您尝试访问Passenger对象。这位乘客从哪里来?

public void getBoat(Boat boat) { 
    boat.passengers(add(getPassenger(passenger))); 
} 

看来,这种方法应该是这样的:

public void addPassengerToBoat(Boat boat, Passenger passenger) { 
    boat.addPassenger(passenger); 
} 
+0

三江源你性反应,但不会解决你的建议要求我在船舱中定义一个新人?我已经定义了这个人,只是想将这个人添加到列表中 – Mark

+0

@Mark这只是你如何使用addPassenger()的一个例子。您没有在代码中创建任何人员对象。请注意,任何地方都不会有新人(...)。 –

0

//由于乘客在船类是在私人范围。你不能这样访问。如果你有一个getter()和setter()方法中船类passesngers

public void getBoat(Boat boat) { `// !! Boat has already been selected by another method` 

    boat.getPassengers().add(getPassenger(passenger))); 
} 

在船班,

public LinkedList<Person> getPassengers(){ 
return this.passengers; 
} 
+0

谢谢你的回应。我遇到一个错误,虽然与你的孤独,在船“LinkedList ”正在返回错误“找不到符号 - 类乘客” – Mark

+0

谢谢你的更正,我感谢你的帮助。现在虽然getBoat方法返回错误'无法找到变量乘客'在这一点 boat.getPassengers()。add(getPassenger(> passenger <))); 你有什么想法我可以解决这个问题吗? – Mark

+0

那是因为,你还没有定义班上的乘客。我建议你从tutorialspoint.com或mkyong浏览一些java教程。谢谢 –

相关问题