Добавление элемента в ArrayList - PullRequest
0 голосов
/ 28 февраля 2012

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

У меня есть класс флотов с конструктором

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

Итак:

В моем TUI у меня есть вспомогательный метод с именем createFleet.Когда пользователь нажимает 1 в меню, он запрашивает название своей компании, а затем создает флот с именем.Этот метод:

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("");
}

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

Fleet 0: Fleet Number One

Но когда я добавляю флот номер один, затем нажимаю1 снова в меню, чтобы добавить ДРУГОЙ флот (названный Флот номер два) и распечатать список флот, результаты:

Fleet 0: Fleet Number Two
Fleet 1: Fleet Number Two

Кажется, что смешивает два ... и это еще больше ломает программукогда я пытаюсь добавить грузовики в парк, потому что он не может выбрать «правильный» парк.

Пожалуйста, дайте мне знать, если вам нужен какой-либо другой мой код.Мне просто нужно это, чтобы правильно добавить и распечатать флоты в списке флотов:

private static ArrayList<Fleet> fleetCollection;

Спасибо :) за помощь!

Ответы [ 4 ]

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

Вам необходимо четко понимать использование static

статической переменной

  • Это переменная, которая принадлежит классу, а не объекту(экземпляр)
  • Статические переменные инициализируются только один раз, в начале выполнения.Эти переменные будут инициализированы в первую очередь, перед инициализацией любых переменных экземпляра
  • Одна копия будет доступна всем экземплярам класса
  • Статическая переменная может быть доступна непосредственно по имени класса ине нуждается ни в каком объекте
  • Синтаксис: <class-name>.<variable-name>

статический метод

  • Это метод, который принадлежиткласс, а не объект (экземпляр)
  • Статический метод может обращаться только к статическим данным.Он не может получить доступ к нестатическим данным (переменным экземпляра)
  • Статический метод может вызывать только другие статические методы и не может вызывать нестатический метод из него.
  • Статический метод может бытьпрямой доступ по имени класса и не требует каких-либо объектов
  • Синтаксис: <class-name>.<method-name>
  • Статический метод не может ссылаться на ключевые слова "this" или "super" в любом случае

Источник: http://www.javatutorialhub.com/java-static-variable-methods.html

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

Вы, вероятно, объявили businessName в классе флота static, если так, то удалите его

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

вы переопределили метод равных во Флоте?если это так и это не правильно, это может быть причиной вашего странного результата

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

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

class Fleet{
String businessName;
public Fleet(String businessName)
{ this.businessName = businessName;}
public String getBusinessName()
{
    return businessName;
}
}

public class T {
private static ArrayList<Fleet> fleetCollection = new ArrayList<Fleet>();

    public static void main(String[] args) 
    {
        createFleet("A");
         printFleets();
         createFleet("B");
        printFleets();
    }
     public static void createFleet(String name){
    System.out.println("");
    fleetCollection.add(new Fleet(name));
}
public static void printFleets(){
    Iterator i = fleetCollection.iterator();
    Fleet f;
    while(i.hasNext())
    {
        f = (Fleet)i.next();
        System.out.println(f.getBusinessName());
    }
}

}

Печатается как положено.

A

A
B

Проверьте ваши модификаторы доступа в поле "businessName". Это не должно быть статичным. Также проверьте метод printFleets ().

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