2011-12-29 5 views
-4

У меня есть 2 Java файлыООП Java: добавление элементов в ArrayList

test.java:

public class test { 
    public static void main(String[] args) { 
     Storage data = new Storage(); 
     data.Store("Jack", 60, 182); 
     Storage data2 = new Storage(); 
     data2.Store("Peter", 70, 176); 
    } 
} 

Storage.java:

public class Storage { 
    ArrayList<String> names = new ArrayList<String>(); 
    public void Store(String name,int weight,int height){ 
     names.add(name); 
     System.out.print(names); 
     /* Output: 
     * [Jack][Peter] 
     * I need: 
     * [Jack,Peter] 
     */ 
    } 

} 

Итак, как я могу добавить элементы в мой ArrayList? Может ли кто-то объяснить мне, почему он показывает мне два значения в одном индексе? Кажется, как [] [] массив, но я не уверен.

+2

'ArrayList' это ** не ** массив. Это * коллекция *. – Bohemian

+0

методов в Java являются 'lowerCamelCase()', 'UpperCamelCase' зарезервирован для имен классов ... вы ошибаетесь в одном и том же маленьком фрагменте ... –

+0

@Jarrod Roberson Я знаю, что я просто сделал быстрый тест для этого проблема. Ваш комментарий не воспитывал меня. – Maksim

ответ

-1

data.Store("Jack", 60, 182); выходы:

[Jack]

и data2.Store("Peter", 70, 176); выходы:

[Питер]

Таким образом, окончательный выход:

[Джек] [Питер]

ArrayListtoString() сек вызывается метод System.out.print(names);, метод возвращает что-то вроде "[элемент, элемент, ...]".

Чтобы получить желаемый результат:

Storage data2 = new Storage(); 

Удалить эту строку.

Изменить другую линию

data2.Store("Peter", 70, 176); 

в

data.Store("Peter", 70, 176); 

Update:

Вы Основной метод должен выглядеть следующим образом:

public static void main(String[] args) { 
    Storage data = new Storage(); 
    data.Store("Jack", 60, 182);   
    data.Store("Peter", 70, 176); 
} 
+0

Благодарю вас за этот хороший ответ, но сейчас я получаю выход [Jack] [Jack, Peter]. – Maksim

+0

@Maksim: См. Обновление. –

0

у вас есть два экземпляра Storage, поэтому 2 списка массивов, каждый из которых имеет одно имя, поэтому вы получаете [Джек] (из первого списка) и [Петр] со второго.

2

Поскольку вы создали два отдельных ArrayList с в двух отдельных Storage объектов и видим выход из обоих этих объектов на одной и той же линии в вашем выводе (потому что вы используете print, а не println и не включая символ новой строки (s))

public static void main(String[] args) { 
    Storage data = new Storage(); 
    data.Store("Jack", 60, 182); 
    data.Store("Peter", 70, 176); 
} 

Edit: Для ОП на основе приведенных ниже комментариев:

Снимите System.out.print(names); линия от вашего Store() метод.

Добавьте следующий метод к вашему Storage классу:

public void printList() 
{ 
    System.out.println(names); 
} 

Измените ваш main() на:

public static void main(String[] args) { 
    Storage data = new Storage(); 
    data.Store("Jack", 60, 182); 
    data.Store("Peter", 70, 176); 
    data.printList(); 
} 

Также - имена методов должны не начать с верхним регистром. Вы должны использовать camelCase

+0

Спасибо за ответ. Я получаю [Джек] [Джек, Питер] с этим решением, которое все еще не то, что мне нужно. – Maksim

+0

Вы получаете именно то, что просили. В первый раз, когда вы вызываете 'Store', он добавляет« Jack »в (пустой)' ArrayList', затем печатает весь список (который теперь содержит «Jack»). Во второй раз, когда вы вызываете 'Store', он добавляет« Peter »в' ArrayList', затем печатает весь список (который теперь содержит как «Jack», так и «Peter»). –

+0

См. Изменение к моему ответу выше. –

0

Создано 2 объекта Хранения. Каждый из них содержит информацию о списке. Джек был добавлен в первое хранилище, Питер - второй.

Если вы хотите создать хорошую инкапсуляцию, сделайте следующее. Добавьте методы доступа в класс хранения. Он должен полностью скрывать от вызывающей стороны детали его реализации (т. Е. Что он содержит информацию о людях в списке). Я думаю, что создание отдельного класса Person тоже хорошая идея.

Вот вид фрагмента кода.

общественный класс Person { private String name; закрытый вес; частная внутренняя высота;

public Person() { 
} 

public Person(String name, int weight, int height) { 
    this.name = name; 
    this.weight = weight; 
    this.height = height; 
} 

public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public int getWeight() { 
    return weight; 
} 
public void setWeight(int weight) { 
    this.weight = weight; 
} 
public int getHeight() { 
    return height; 
} 
public void setHeight(int height) { 
    this.height = height; 
} 

}

общественного класса хранения { частных Список людей = новый ArrayList();

public Storage() { 

} 

public void add(Person person) { 
    people.add(person); 
} 

public Collection<Person> getPeople() { 
    return Collections.unmodifiableCollection(people); 
} 

}

Теперь вы можете создать экземпляр для хранения и добавить туда людей.

Обратите внимание на подробностях. Они важны. Например, я никогда не пишу ArrayList list = new ArrayList(). Вместо этого я использую список интерфейсов. Подумайте, почему.

Обратите внимание на реализацию метода getPeople(). Подумайте, почему я использовал Collections.unmodifiableCollection().

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