Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 19.02.2012
Сообщений: 83

Как реализовать коллекцию?

21.02.2013, 01:34. Показов 1382. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня был вот такой код:

Создан массив автобуса:
Java
1
Bus bus = new Bus(max_seats, enter_number, passeng);
Аргумент passeng состоит из массива passeng[]:
Java
1
Passengers passeng[] = new Passengers[Integer.valueOf(enter_number)];
Каждая строка массива passeng (passeng[i]) состоит из массива passengers:
Java
1
Passengers passengers = new Passengers();
Массив passengers состоит из трёх переменных:
Java
1
2
3
4
Passengers passengers = new Passengers();
passengers.setName(name);
passengers.setAge(Integer.valueOf(age));
passengers.setCard(card);
В ходе программы в массив "passengers" передаются данные входящих в автобус людей. Мне было необоходимо сделать, если количество желающих войти больше, чем количество максимально возможных мест в автобусе (max_seats), то лишних надо удалить.
Таким образом мне надо было взять массив "passengers" и удалить из него лишних людей. Но так как в Яве размер массива нельзя изменять, то мне посоветовали массивы поменять на коллекции.

Вот тут я немного в смятении, так как коллекции только начал изучать.. подскажите как поступить??

Я так понимаю, мне надо массив passengers и переделать его в коллекцию. Из всех прочитанных я думаю мне подойдёт LinkedList, так как необходимо будет удалить элементы начиная с середины списка до конца. Тогда получается что-то типо:
Java
1
2
3
4
List<Passengers> passengers = new LinkedList<Passengers>();
List<Passengers> add.setName(name);
List<Passengers> setAge(Integer.valueOf(age));
List<Passengers> setCard(card);
Но запись явно неправильная..
1. Я не понимаю даже можно ли в 1 элемент списка добавить какбы массив из name, age, card???? Чтобы потом по етому списку пробежаться как по строкам и удалить ненужные строки, содержащие name, age, card ??
2. Как правильно записать добавление элементов в список passengers?
3. И надо ли менять запись в классе Passengers? Например, при объявлении переменных name, age, card??

Прошу помогите.. я быстро схвачу всё и научусь..

Добавлено через 3 часа 1 минуту
Кажется, мне надо сделать наподобие:

Java
1
2
3
4
5
6
7
8
9
10
        ArrayList pass = new ArrayList();
        
        Passengers passengers = new Passengers();
        passengers.setName(name);
        passengers.setAge(Integer.valueOf(age));
        passengers.setCard(card);
        
        pass.add(passengers);
        
        return passengers;
Правильно?
Если да, то return должен быть passengers или pass?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2013, 01:34
Ответы с готовыми решениями:

Как реализовать собственную коллекцию?
Здравствуйте! Задача состоит в следующем: надо реализовать список заданий(не List&lt;&gt;). Есть класс ToDoList, который позволяет...

Как реализовать пользовательскую коллекцию в виде структуры, или преобразовать класс коллекции LIst в структуру
Столкнулся с вопросом создания пользовательской коллекции в виде структуры. Из всех источников более мене что-то описано по данной теме...

Реализовать коллекцию
Задание. Создать класс Student с двумя полями и конструктором с параметрами. Если нужно добавить в класс дополнительные методы или...

5
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
21.02.2013, 13:51
Java
1
2
3
4
5
6
7
8
9
10
List<Passengers> pass = new LinkedList<Passengers>();
 
Passengers passengers = new Passengers();
passengers.setName(name);
passengers.setAge(Integer.valueOf(age));
passengers.setCard(card);
 
pass.add(passengers);
 
return pass;
если это метод который принимает имя, возраст, карточку и должен возвращать коллекцию пасажиров.



List pass; - список содержащий объекты типа Object или его наследников. равносильно List<Object> pass;
т.е. например, pass.get(i) вернет тебе объект типа Object по индексу i. вне зависимости от того, что ты туда всунешь. для наглядности:

Java
1
2
3
4
5
List pass = new LinkedList();
pass.add(new Passengers()); // работает
pass.add(new Integer()); // работает
pass.add(new Object()); // работает
pass.get(i).getAge() // ошибка

List<Passengers> pass; - список содержащий объекты типа Passengers или его наследников.
т.е. например, pass.get(i) вернет тебе объект типа Passengers по индексу i.
для наглядности:

Java
1
2
3
4
5
List<Passengers> pass = new LinkedList<Passengers>();
pass.add(new Passengers()); // работает
pass.add(new Integer()); // ошибка
pass.add(new Object()); // ошибка
pass.get(i).getAge() // работает
это относится ко всем интерфейсам коллекций и их реализациям.

да, и мне кажется тебе нужно немного подтянуть терминологию)
1
0 / 0 / 1
Регистрация: 19.02.2012
Сообщений: 83
21.02.2013, 20:17  [ТС]
1)
Java
1
2
3
4
5
List pass = new LinkedList();
pass.add(new Passengers()); // работает
pass.add(new Integer()); // работает
pass.add(new Object()); // работает
pass.get(i).getAge() // ошибка
Java
1
2
3
4
5
List<Passengers> pass = new LinkedList<Passengers>();
pass.add(new Passengers()); // работает
pass.add(new Integer()); // ошибка
pass.add(new Object()); // ошибка
pass.get(i).getAge() // работает

В своём куске кода я полностью разобрался, а вот в Ваших двух примерах немного не допонимаю..
В первом варианте при pass.get(i).getAge() возникает ошибка, потому что все добавляемые объекты не относятся к классу Passengers, в котором имеется метод getAge() - так?
А во втором варианте все объекты относятся к классу Passengers, поетому ссылаясь на них можно и задействовать метод getAge, который прописан в этом классе - так??


2)
Помогите ещё дальше разобраться с моим кодом:
здесь находится код всего файла Program.java (для модератора: при использовании спойлера форматирование под яву пропадает)
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Program {
public static void main(String[] args) {
new Program().AllActions();
}

private void AllActions() {
Bus a = input();
System.out.println("==================== ======================================== ======");
output(a);
}

private Bus input() {
System.out.println("=== Vvodim informaciju ===");
System.out.println("=== Izna4alno v avtobuse 0 chelovek ===");
System.out.print("Skolko chelovek vmeshaet avtobus: ");
String max_seats = keyboard();
System.out.print("Skolko chelovek zelaet zajti v avtobus: ");
String enter_number = keyboard();
Passengers passeng[] = new Passengers[Integer.valueOf(enter_number)];
for(int i=0; i<passeng.length; i++) {
passeng[i] = inputPassengers();
}

Bus bus = new Bus(max_seats, enter_number, passeng);
bus.setMax_seats(Integer.valueOf(max_sea ts));
bus.setEnter_number(Integer.valueOf(ente r_number));

return bus;
}

private Passengers inputPassengers() {
System.out.print("Name: ");
String name = keyboard();
System.out.print("Age: ");
String age = keyboard();
System.out.print("Card (yes/no): ");
String card = keyboard();

/* Passengers passengers = new Passengers();
passengers.setName(name);
passengers.setAge(Integer.valueOf(age));
passengers.setCard(card);*/

List<Passengers> pass = new LinkedList<Passengers>();

Passengers passengers = new Passengers();
passengers.setName(name);
passengers.setAge(Integer.valueOf(age));
passengers.setCard(card);

pass.add(passengers);

return pass;
}

private void output(Bus bus) {
System.out.println("Avtobus vmeshaet " + bus.getMax_seats() + " chelovek");
System.out.println("------------");
System.out.println("V avtobus zashli " + bus.getEnter_number() + " chelovek:");
System.out.println("Name\tAge\tCard");

for(Passengers passeng : bus.getPasseng()) {
System.out.println(passeng.getName() + "\t" + passeng.getAge() + "\t" + passeng.getCard());
}

/* if(bus.getPasseng().length > bus.getMax_seats()) {
for(int i=0; i < bus.getPasseng().length-1; i++) {
if(i >= (bus.getMax_seats()-1))
Bus.passeng[i];
}
}

for(Passengers passeng : bus.getPasseng()) {
System.out.println(passeng.getName() + "\t" + passeng.getAge() + "\t" + passeng.getCard());
}*/
}

private String keyboard() {
Scanner scan = new Scanner(System.in);
return scan.next();
}
}


Я прописал следующий код:
Java
1
2
3
4
5
6
7
8
9
10
List<Passengers> pass = new LinkedList<Passengers>();
         
Passengers passengers = new Passengers();
passengers.setName(name);
passengers.setAge(Integer.valueOf(age));
passengers.setCard(card);
         
pass.add(passengers);
         
return pass;
Теперь return pass представляет из себя список, поэтому компилятор требует изменить возвращаемый тип у данного метода:
Java
1
private List<Passengers> inputPassengers() {
А изменив тип возвращаемого объекта компилятор затребовал изменить и тип в строчках, где прописан вызов метода inputPassengers():
Java
1
2
3
4
Passengers passeng[] = new Passengers[Integer.valueOf(enter_number)];
for(int i=0; i<passeng.length; i++) {
    passeng[i] = inputPassengers();
}
И вот тут я уже запутался.
Менял в етих строках на:
Java
1
List<Passengers> passeng[] = new List<Passengers>();
и множеством других способов, но компилятор всё выдаёт различные ошибки.

Слишком много изменений типов объектов / массивов на List необходимо сделать, так что я запутался... Прошу помогите!
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
21.02.2013, 22:26
Цитата Сообщение от Exxtazy Посмотреть сообщение
В первом варианте при pass.get(i).getAge() возникает ошибка, потому что все добавляемые объекты не относятся к классу Passengers, в котором имеется метод getAge() - так?
А во втором варианте все объекты относятся к классу Passengers, поетому ссылаясь на них можно и задействовать метод getAge, который прописан в этом классе - так??
почти. в первом варианте возникает ошибка потому что возвращаемый объект имеет тип Object экземпляром какого бы класса он ни был, а у него нет метода getAge(). т.е. все что добавляется не типизированную коллекцию приводится к самому общему типу, Object'у. именно потому туда можно добавлять все что угодно. короче говоря полиморфизм в чистом виде
во втором случае все то же самое, но роль самого общего типа будет уже Passengers. все возвращаемые элементы будут иметь именно этот тип, а засовывать можно только Passengers и его наследников
можно почитать про generics если есть желание сломать себе мозг. так называется та самая магия с треугольными скобочками


по поводу 2)
массивы и коллекции это разные структуры данных. работа с ними выглядит совершенно иначе (http://www.ibm.com/developerwo... ion13.html)
придется или переписывать программу под коллекции или отказаться от них затирая в массиве ненужные ячейки null'ом
1
0 / 0 / 1
Регистрация: 19.02.2012
Сообщений: 83
21.02.2013, 23:17  [ТС]
окий. ну вроде всё понял. думаю если заново написать программу, используя коллекции, то у меня всё получится, но щас этим уже заниматься не буду - применю новые знания в следующий раз.
а Вам, AckiyBolt, огромное спасибо!
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
21.02.2013, 23:20
Цитата Сообщение от Exxtazy Посмотреть сообщение
окий. ну вроде всё понял. думаю если заново написать программу, используя коллекции, то у меня всё получится, но щас этим уже заниматься не буду - применю новые знания в следующий раз.
а Вам, AckiyBolt, огромное спасибо!
всегда пожалуйста)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2013, 23:20
Помогаю со студенческими работами здесь

Реализовать класс-коллекцию, хранящую элементы в виде списка массивов
Приветствую! Дана такая задача: &quot;реализовать класс-коллекцию , хранящую элементы в виде сложной структуры — списка массивов. Сравнить время...

Реализовать класс который должен асинхронно выгружать данные из бд и возвращать коллекцию
есть класс который должен асинхронно выгружать данные из бд и возвращать коллекцию class CategoryHelper:EntityHelper&lt;Category&gt; ...

Дано число R и коллекцию размера N. Преобразовать коллекцию, заменив все ее положительные элементы на число R
Всем доброго времени суток. Вот такая задачка. Дано число R и коллекция размера N. Преобразовать коллекцию, заменив все ее...

Как создать коллекцию?
Заранее прошу прощения за примитивный вопрос. У меня задача чтение из бинарника данные. Структура бинарника состоит из блоков: ...

Как вернуть коллекцию?
формирую коллекцию private string Читать_коллекцию_кодификаторов() { List&lt;string&gt; maskl = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru