Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Здравствуйте! Есть такой фрагмент кода
Код:
 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, 17:32   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Тут нет 31 строки.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.09.2018, 17:42   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

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

П.С. А больше веселит очередное название темы не связано с сутью самой темы.
p51x на форуме Ответить с цитированием
Старый 11.09.2018, 03:48   #4
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

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, 16:38   #5
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Здравствуйте!
Я не знаю как изменить название темы.
Суть действительно оказалась не в рандоме.
Я сделал инициализацию объектов в массиве и всё работает.
Код:
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, 18:13   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
А если объектов в массиве окажется 10000? Или 100500?
А что изменится-то? Какие еще могут быть варианты? Вам же все равно надо создать их.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.09.2018, 19:11   #7
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

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

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

Чтобы не писать цикл с инициализацией можно с Java 8 Stream как-то так: https://stackoverflow.com/a/36312856/964478 (или .collect(Collectors.toList())).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иницилизация расширения файла через ресстр саша40 Общие вопросы Delphi 8 26.10.2012 19:27
Выполнить обработку массивов. предусмотреть описание массивов как динамических Vika_0_0 Паскаль, Turbo Pascal, PascalABC.NET 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 10:38