【问题标题】:Adding one instance to the linked list of another instance将一个实例添加到另一个实例的链表中
【发布时间】:2015-04-07 04:38:20
【问题描述】:

我是一名初学者 Java 程序员,我正在尝试将一个名为 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; }
}

【问题讨论】:

    标签: java methods linked-list


    【解决方案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);
        }
    }
    

    然后您可以通过将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);
    }
    

    【讨论】:

    • 谢谢您的回复,但是您建议的解决方案不是需要我在船类中定义一个新人吗?我已经定义了这个人,只是想将该人添加到列表中
    • @Mark 这只是你如何使用addPassenger() 的一个例子。您没有在代码中创建任何人对象。请注意,任何地方都没有 new Person(...)。
    【解决方案2】:

    //因为Boat类的乘客属于私有范围。你不能这样访问。如果你在 Boat 类中有一个 getter() 和 setter() 方法,供过路人使用

    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;
    }
    

    【讨论】:

    • 感谢您的回复。尽管您的解决方案我遇到了一个错误,但在船上“LinkedList”正在返回错误“找不到符号 - 类乘客”
    • 感谢您的更正,感谢您的帮助。现在虽然 getBoat 方法此时返回错误“找不到变量乘客”boat.getPassengers().add(getPassenger(>passenger
    • 那是因为,您还没有定义班级中的乘客。我建议您从 tutorialspoint.com 或 mkyong 阅读一些 Java 教程。谢谢
    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多