2015-04-07 3 views
1

Я начинающий программист на Java, и я пытаюсь добавить выделенный объект под названием Person в один связанный список в связанный список, содержащийся в другом классе экземпляров под названием «Лодка». Я могу выбрать оба объекта, которые я хочу, но я не знаю, как добавить выбранного Person в связанный список в выбранном объекте Boat. Я включил детали класса 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)); 

Не возвращать список пассажиров в метод получения. Это сломает инкапсуляцию, так как другие классы смогут изменить список пассажиров лодки и даже очистить ее.

В коде есть еще несколько проблем. Например:

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

Thankyou для вас Быстродействие, но было бы не решение, которое вы предлагаете мне требуется определить нового человека в классе лодки? Я уже определил человека и просто хочу добавить этого человека в список – Mark

+0

@Mark Это просто пример того, как вы будете использовать 'addPassenger()'. Вы не создали ни одного объекта человека в своем коде. Заметьте, что нет нового Person (...) в любом месте. –

0

// Поскольку пассажиров в классе лодок находится в частной области. Вы не можете получить доступ к этому. Если у вас есть поглотитель() и сеттер() метод в классе лодок для 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 (> пассажир <))); У вас есть идеи, как я могу обойти это? – Mark

+0

Это потому, что вы не определили пассажира в своем классе. Я бы посоветовал вам ознакомиться с некоторыми учебниками по java от tutorialspoint.com или mkyong. благодаря –

Смежные вопросы