Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275

Массив объектов java как инициализировать коротко?

07.05.2016, 23:24. Показов 9899. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я недавно начал изучать java. до этого около года учу с++.
возникла сложность с массивом объектов в java.
я создаю такой код описан внизу.
возникает сложность инициализацией, где мне нужно еще инициализировать массив через цикл for.
есть более простой способ инициализировать массив объектов, похожий на с++ или хотя бы без цикла for.
я учу по книге " герберта шилда полное руководство java 8 " и нахожусь 198 стр, но я пока не встретил описания
по созданию массивов собственных классов.
спасибо заранее за помощь.
если можете, то посоветуйте заодно книги по java на русском, желательно java 8

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Girls {
public static void main(String args[])
{
    Models model[] = new Models[10];
    for (int i = 0; i < 10; i ++)
        model[i] = new Models();
    for(int i = 0; i < 10; i++)
        model[i].age = i;
    
    System.out.println(model.length);
    for(Models x: model)
        System.out.println(x.age);
}
Java
1
2
3
4
5
6
7
8
9
10
public class Models {
 public int age;
 public int raiting;
public int Get(){return age;}
Models()
{
    int age = 1;
    int raiting = 1;
}
}
Добавлено через 8 минут
я пробовал так
Java
1
Models model[] = new Models[10] ();
и так
Java
1
Models model[] = new Models()[10];
но выдает ошибку.
а мне нужно без цикла for
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2016, 23:24
Ответы с готовыми решениями:

Не могу инициализировать массив объектов
Выдает ошибку: &quot;Требуется имя метода&quot; Понимаю, что код быдловатый... class Ceil { private static bool _Fill; ...

Создать динамический массив объектов, инициализировать его
Создать динамический массив объектов, инициализировать его. Организовать поиск элемента в массиве по заданному значению. Создать иерархии...

Как коротко ссылаться на массив?
Здравствуйте, посоветуйте как лучше поступить в следующей ситуации. Есть, допустим, массивы А1, А2, ... А7. Каждый имеет вид типа...

28
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
07.05.2016, 23:29
Для объектов предназначены коллекции, копайте в этом направлении.
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
07.05.2016, 23:32  [ТС]
а здесь нет методов похожих на с++

Добавлено через 1 минуту
я кстати заметил, с++ очень сильно отличается от java. хоть и говорят про то что с с++ легко перейти на java, но на самом деле, это только больше путает.
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
07.05.2016, 23:40
Ваш код очень странный, можно пользоваться и просто массивами, но лучше коллекциями. Почитайте для начала Java Learning авторы(Бейтс и Сьерра) доступно объясняют.
1
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
07.05.2016, 23:42
Цитата Сообщение от mercurygermes Посмотреть сообщение
Models model[] = new Models[10];
в java принято писать так Models[] model = new Models[10]

Цитата Сообщение от mercurygermes Посмотреть сообщение
где мне нужно еще инициализировать массив через цикл for.
насколько я понял, этого достаточно -
Цитата Сообщение от mercurygermes Посмотреть сообщение
Models model[] = new Models[10]; for (int i = 0; i < 10; i ++) model[i] = new Models(); for(int i = 0; i < 10; i++) model[i].age = i;
note: можно i передавать в конструктор

Цитата Сообщение от mercurygermes Посмотреть сообщение
есть более простой способ инициализировать массив объектов, похожий на с++ или хотя бы без цикла for.
например так:
Java
1
2
3
4
5
6
Model[] models = {
new Model(1),
new Model(2),
...
new Model(10)
};
1
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
07.05.2016, 23:44
Java
1
2
3
4
5
6
7
8
9
10
11
12
 public class Models {
    private int age;
    private int raiting;
 
    public  Models(int age, int raiting)
    {
        this.age        = age;
        this.raiting    = raiting;
    }
 
    public int getAge() {return age;}
    public int getRaiting() {return raiting;}
В методе main() при создании экземпляра объекта в конструкторе передаете параметры каждого объекта (age и raiting)
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
07.05.2016, 23:51  [ТС]
Java
1
Models model[] = new Models[10]; for (int i = 0; i < 10; i ++) model[i] = new Models(); for(int i = 0; i < 10; i++) model[i].age = i;
меня напрягает этот участок кода.
так как сначала я должен сделать:
[JAVA]
Java
1
Models model[] = new Models[10];
а потом еще
Java
1
for (int i = 0; i < 10; i ++) model[i] = new Models();
если это был с++ то можно было обойтись
C++
1
Models * model = new Models[10];
или
C++
1
Models model[10];
в самом языке без колеции можно сделать что то типа такого?
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
07.05.2016, 23:59
Цитата Сообщение от mercurygermes Посмотреть сообщение
Models * model = new Models[10];
Насколько я понимаю данная строка означает, что Вы только создали массив model c типом Models и размерностью 10.

Добавлено через 1 минуту
Java
1
2
В Java аналогично Models[] model = new Models[10]; // объявляю массив размерностью 10
Перебор же по циклу это уже заполнение...
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
08.05.2016, 00:00  [ТС]
в этой строке я создаю указатель на массив объектов. где их 10
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
08.05.2016, 00:03
Вот именно, далее в с++ вы бы заполняли массив также по циклу, либо вручную:
model[0] = new Models(param1, param2);
model[1] = new Models(param1, param2);
...
model[n] = new Models(param1, param2);
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
08.05.2016, 00:03  [ТС]
Хотя в java можно так
Int model [ ] = new int [10];
И не надо заполнять
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
08.05.2016, 00:05
Где это Вы такое вычитали?
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
08.05.2016, 00:06  [ТС]
В с++ мне бы вообще не пришлось заполнять
Я там мог сразу

Java
1
model [0].age = 10;
Добавлено через 34 секунды
У герберт шилда

Добавлено через 21 секунду
Я даже такое проделал могу скинуть код
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
08.05.2016, 00:10
Цитата Сообщение от mercurygermes Посмотреть сообщение
model [0].age = 10;
вот это убивает одного из 3 или уже 4 китов ООП. Если вы решили все-таки выучить Java, то предлагаю прочитать выше приведенную книгу...
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
08.05.2016, 00:15  [ТС]
Такой синтаксис в с++ используется.

Добавлено через 3 минуты
Age это просто переменная. И не надо
Делать так
For (int i= 0; i < 10; i++)
model [i] = new Models ();
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
08.05.2016, 00:21
В Java тоже можно так обратиться к переменной age определив ее как public, НО такого человека повесят за такой подход, который убивают всю инкапсуляцию.
1
 Аватар для ninjacut
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
08.05.2016, 00:33
А расскажите, если у вас в C++ в классе отсутствует конструктор без аргументов вы же не сможете таким же образом инициализировать его, ведь так? И память освобождать вручную приходится...
Языки-то разные, хоть и похожие. В С++ конструктор будет вызываться сам при таком создании массива, в Java по умолчанию всем элементам присвоится null. Хотите удобств, используйте List.
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
08.05.2016, 00:54  [ТС]
Это я тоже знаю) я использую методы. Но суть в том что мне надо через For инициализировать
Конструктором класса.
for (int I = 0; I < 10; i++)
model [I ] = new Models ();

Добавлено через 1 минуту
А в java я вынужден сначала так сделать и только потом
Обращаться каждому объекту массива и к ее данным

Добавлено через 9 минут
C++
1
2
Data_Employee model[2];
    model[0].Get_Age();
этот код написан на с++.
вот еще пример быстрого создания объектов.

C++
1
2
3
Data_Employee * girls = new Data_Employee[2];
    girls[0].Get_Age();
    girls->Get_Age();
а теперь сравните с текущим кодом создания массивов объектов java.
хотя я очень хочу выучить этот язык.

Добавлено через 2 минуты
память можно освободить через деструктор. он автоматически освободит память как только объект выйдет из тела функции,

Добавлено через 1 минуту
инициализировать объект без аргументов конструктора нельзя, но в с++ автоматически создается конструктор и деструктор по умолчанию

Добавлено через 5 минут
я сейчас хочу изучить java из за его безопастности по сравнению с++.
хотя с++ очень мощный, но его очень непрактично использовать в маленьких краткосрочных проектах.
так как скорость разработки очень медленная. одна книга по с++ занимает 1244 стр. не стчитая глубокого понимания стл. а еще есть qt, который тоже обширен. а на jave формочки уже можно сразу создать.
да и работу на с++ сложнее найти, так как требуют не менее 5 лет опыта работы.
я изучаю сейчас два языка. но с++ уже знаю достаточно хорошо.
0
22 / 22 / 2
Регистрация: 01.05.2016
Сообщений: 42
08.05.2016, 00:58
Test[] array = new Test[10];
array[0].one = 1;
array[0].sharePoint();

В Java тоже можно так писать как и с++, НО так писать нельзя никогда нарушается принцип инкапсуляции

Добавлено через 2 минуты
Доступ к переменным должен осуществляться через методы, а не задаваться значения на прямую, также в методах можете реализовать различного рода проверки и тд и тп...
1
1 / 3 / 0
Регистрация: 26.09.2015
Сообщений: 275
08.05.2016, 00:59  [ТС]
Он нарушается если инициализировать переменную напрямую. А я это показал просто чтобы упростить пример.
А так нужно изменять данные через методы.
Но меня волнует. Можно ли массив без array и без цикла for сразу инициализировать конструкторами. Или это в языке не поддерживает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2016, 00:59
Помогаю со студенческими работами здесь

Как коротко ввести массив данных?
Дамы и господа, вопрос следующий. Имеется набор параметров, которые будут неизменны при различных расчётах - вроде справочных данных. Как...

Как коротко записать массив в таблицу?
Массив из 25 элементов: E F F# G G# A A# B C C# D D# E F F# G G# A A# B C C# D D# E Нужно для каждого столбца первой строки записать...

Массив объектов Java
Почему при добавлении данных массив перезаписывает все свои элементы в имя последнего добавленного? int i=0; ...

Как инициализировать массив?
Ну я новичок в MS Visual C++ так что при написании оконного приложения у меня возникла такая проблема: объявляю массив типа int: ...

Как лучше инициализировать массив?
Как лучше инициализировать массив? unsigned int *servo_position; void servo_on(void) { servo_position=(unsigned...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Реалии
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. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru