添加一个实例到另一个实例的链表
问题描述:
我是一个初学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; }
}
答
可以在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);
}
答
//由于乘客在船类是在私人范围。你不能这样访问。如果你有一个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;
}
三江源你性反应,但不会解决你的建议要求我在船舱中定义一个新人?我已经定义了这个人,只是想将这个人添加到列表中 – Mark
@Mark这只是你如何使用addPassenger()的一个例子。您没有在代码中创建任何人员对象。请注意,任何地方都不会有新人(...)。 –