Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 10.09.2018, 18:31   #1
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию Иницилизация массивов

Здравствуйте! Есть такой фрагмент кода
Код:

 System.out.printf("Введите количество 4-угольников");
        a=in.nextInt();
        System.out.printf("Введите количество прямоугольников");
        b=in.nextInt();
        Chet_ugol [] ch=new Chet_ugol[a];
        Pr_ugol [] pr=new Pr_ugol[b];
        Random rand=new Random(47);


            for(int k=0; k<2; k++)
            {
                ch[i].mass[0][q]=rand.nextInt(10);//rand.nextInt(10);
                ++q;
            }

на 31 строке в цикле фор выдает такую ошибку
Exception in thread "main" java.lang.NullPointerException
at com.company.Main.main(Main.java:31)
Скажите пожалуйста, это из-за того что у меня массив поячеечно не инициализирован и ячейки как-бы NULL?
KAMLS вне форума   Ответить с цитированием
Старый 10.09.2018, 18:32   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,150
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Тут нет 31 строки.
Alex11223 на форуме   Ответить с цитированием
Старый 10.09.2018, 18:42   #3
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,526
Репутация: 2099
По умолчанию

Причем не понятно, кто такие Chet_ugol, mass и q...

П.С. А больше веселит очередное название темы не связано с сутью самой темы.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 11.09.2018, 04:48   #4
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Chet_ugol и Pr_ugol это классы, Pr_ugol наследует Chet_ugol.
Надо рандомом вставлять в массив который поле Chet_ugol координаты.
31 строка - это
Код:

ch[i].mass[0][q]=rand.nextInt(10);//rand.nextInt(10);

И да, че то с темой наверное не так..) Но я не знаю из-за чего а думал про рандом и так назвал.
KAMLS вне форума   Ответить с цитированием
Старый 11.09.2018, 17:38   #5
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Здравствуйте!
Я не знаю как изменить название темы.
Суть действительно оказалась не в рандоме.
Я сделал инициализацию объектов в массиве и всё работает.
Код:

for(int i=0; i<a; i++)
        {
            ch[i]=new Chet_ugol();
        }

        for(int i=0; i<a; i++)
        {
            pr[i]=new Pr_ugol();
        }

А если объектов в массиве окажется 10000? Или 100500?
Их что, также инициализировать?
Может быть есть другой способ о котором я не знаю? Подскажите пожалуйста.
KAMLS вне форума   Ответить с цитированием
Старый 11.09.2018, 19:13   #6
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,150
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
А если объектов в массиве окажется 10000? Или 100500?
А что изменится-то? Какие еще могут быть варианты? Вам же все равно надо создать их.
Alex11223 на форуме   Ответить с цитированием
Старый 11.09.2018, 20:11   #7
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Какие еще могут быть варианты?
Значит автоварианта нет?. А жаль. А то объявил массив объектов, и хоп все уже создались, инициализированы. А почему нет то? Ведь для чего их создавали? Значит можно было бы предусмотреть вариант автоназначения памяти. Либо при создании какой-либо символ специальный, автоинициализировать либо нет. Ну фантазии мои конечно. Но в чем вред таких предложений?
KAMLS вне форума   Ответить с цитированием
Старый 11.09.2018, 20:37   #8
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,150
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Ну в С++ тоже для указателей не создадутся.
А кроме памяти надо ж еще нужный конструктор вызвать.

Чтобы не писать цикл с инициализацией можно с Java 8 Stream как-то так: https://stackoverflow.com/a/36312856/964478 (или .collect(Collectors.toList())).

Последний раз редактировалось Alex11223; 11.09.2018 в 20:40.
Alex11223 на форуме   Ответить с цитированием
Старый 12.09.2018, 16:44   #9
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Спасибо.
KAMLS вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иницилизация расширения файла через ресстр саша40 Общие вопросы Delphi 8 26.10.2012 19:27
Выполнить обработку массивов. предусмотреть описание массивов как динамических Vika_0_0 Паскаль 8 03.06.2012 10:12
Delphi, сравнение массивов, умножение массивов Marjasja Помощь студентам 0 22.05.2011 19:59
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
TSaveDialog и иницилизация COM в главном потоке. nik531 Компоненты Delphi 0 05.02.2010 11:38


18:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru