2012-02-28 4 views
0

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

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

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 

Но когда я добавляю Fleet номер один, а затем нажмите кнопку 1 на меню еще раз, чтобы добавить еще один флот (названный флот номер два) и распечатать список флота, результаты:

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

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

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

private static ArrayList<Fleet> fleetCollection; 

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

+0

Вы можете отправить код печатиFleets() method? – JProgrammer

+0

Да, извините. Я отступлю. – user1176922

+1

Эй, парень .... где твой вопрос ??? – gtiwari333

ответ

3

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

+0

В этом случае 'getBusinessName()' должно быть ** NOT ** static too – plucury

+0

удалить метод модификатор 'static'' getBusinessName() ' –

+0

удалить модификатор метода' static' 'fleetList' –

1

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

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().

+0

Спасибо :) Теперь он возвращает флоты должным образом, но мой addTruck () все еще сломан. – user1176922

3

Вы должны иметь четкое представление о применении static

статическая переменная

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

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

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

src: http://www.javatutorialhub.com/java-static-variable-methods.html

2

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

+0

вам нужен экземпляр из этого класса, чтобы иметь возможность вызвать нестатический метод; например: Object a = new Object(); метод(); – Tom

+0

Должен ли я открыть новый вопрос для этой проблемы? Или я должен стереть все выше и поставить здесь новый вопрос? – user1176922

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