Java: Доступ к ArrayList внутри ArrayList? - PullRequest
1 голос
/ 28 февраля 2012

В FleetTUI.java у меня есть список флотов (каждый флот будет иметь свой список грузовиков).

private static ArrayList<Fleet> fleetCollection;

В Fleet.java у меня есть список объектов Truck.

ArrayList<Truck> fleetList;

, который инициализируется в своем конструкторе.

    public Fleet(String businessName){
    this.businessName = businessName;
    this.fleetList = new ArrayList<Truck>();
}

Поэтому каждый раз, когда я создаю новый флот, я также составляю список Грузовиков вместе с ним.

В FleetTUI.java у меня есть метод добавления грузовика к флоту, сделанный ранее:

    public static void addTruck(){
    printFleets();
    System.out.println("Please enter the fleet number where this truck will be added:");
    inputText = scan.nextLine();
    int inputFleetId = Integer.parseInt(inputText);
    System.out.println("Please enter the truck's horn sound:");
    inputText = scan.nextLine();
    String inputHorn = inputText;
    System.out.println("Please enter the truck's fuel capactity:");
    inputText = scan.nextLine();
    int inputFuelCapacity = Integer.parseInt(inputText);
    System.out.println("Please enter the amount of gas remaining in the tank:");
    double inputGasRemaining = Double.parseDouble(scan.nextLine());
    **Fleet.fleetList**.add(inputFleetId, new Truck(inputHorn, inputFuelCapacity, inputGasRemaining));
    System.out.println("--- A truck that goes " + inputHorn + " with " + inputGasRemaining + " gallon(s) in a " + inputFuelCapacity + " gallon tank has been added to " + **fleetCollection.getBusinessName()** + "'s fleet ---" );
    System.out.println("");
}

Я подчеркнул, где я получаю ошибки. Ошибки:

Невозможно сделать статическую ссылку на нестатическое поле Fleet.fleetList

Невозможно сделать статическую ссылку на нестатический метод getBusinessName () из типа Fleet

Я не знаю другого способа получить доступ к списку грузовиков из автопарка, который я создал методом:

    public static void createFleet(){
    System.out.println("");
    System.out.println("Please enter the name of the fleet.");
    inputText = scan.nextLine();

    fleetCollection.add(new Fleet(inputText));
    printFleets();
    System.out.println("");
    System.out.println("--- Fleet: " + inputText + " added ---");
    System.out.println("");

}

Так что я думаю, на самом деле, мой вопрос: Как правильно добавить новый Грузовик в список Грузовиков, который находится внутри Флота, который я только что создал, используя createFleet (), который размещен в его собственной коллекции флотов?

Обновление: Спасибо :) вы, ребята, действительно помогли мне! еще раз!

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Ваша проблема в том, что вы создаете static методы, в которых вы затем пытаетесь получить доступ к переменной non-static, в данном случае это fleetlist.Это приведет к ошибке, которую вы показываете.

Поскольку вы используете конструктор и все, вам не нужно вызывать метод static.Называя его статическим, вы сможете вызывать метод без необходимости создания объекта, который, как я вижу, не является тем, к чему вы стремитесь.

Короче говоря, сделайте ваши методы нестатичными, удаливstatic ключевое слово из объявления метода и доступ к вашим методам, таким как addTruck() и createFleet() через использование инициализированного объекта Fleet.

С другой стороны, вы можете объявить свой список флотов какstatic, вот так:

private static ArrayList<Truck> fleetList;

РЕДАКТИРОВАТЬ: увидев ваш комментарий, вот как вы можете это сделать:

В Java считается хорошей практикой инкапсулировать переменные объекта, чтобы вы моглиможет лучше контролировать доступ к такой переменной, так что вы можете сделать что-то подобное в вашем Fleet классе:

private List<Truck> fleetList;

public Fleet(String businessName){
    this.businessName = businessName;
    this.fleetList = new ArrayList<Truck>();
}

public List<Truck> getFleetList()
{
    return this.fleetList;
}

В вашем FleetUI классе вы можете сделать что-то вроде этого:

private ArrayList<Fleet> fleetCollection;    
...   
for (Fleet fleet : this.fleetCollection)
{
    for (Truck truck : fleet.getFleetList())
    {
         //Do something with your truck here
    }
}

РЕДАКТИРОВАТЬ 2: Чтобы добавить грузовик в ваш массив, вы можете сделать это двумя способами.Предположим, что объект fleet - это флот, в который вы хотите добавить свой грузовик.В вашем FleetUI классе вы можете сделать так:

fleet.getFleetList().add(new Truck(...))

Другой (и, на мой взгляд, лучший способ) метод addTruck в вашем fleet объект вроде так:

public void addTruck(Truck truck)
{
    this.fleetList.add(truck);
}
1 голос
/ 28 февраля 2012
  1. Вы вызываете

    Fleet.fleetList.add ()

    метод из статического метода addTruck.

  2. Неправильно ссылаться на такого члена:

    Fleet.fleetList.add

    вам следует ввести метод доступа, чтобы добавить грузовик в список flletList вашего класса Fleet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...