Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибки при работе с массивами 
:(
    Опции темы
alafin
Дата 16.4.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 12.4.2006

Репутация: нет
Всего: 2



Помогите! Уже не знаю в чем дело. ошибка выдается сразу на первом setAddPolyg(0,0,0, 100,0,0, 0,50,0). 
Код

public class IdePanel extends JComponent{
    public IdePanel(){
        count = 0;
        
        pts = new Image[MAXCOUNT][3];
        setAddPolyg(0,0,0, 100,0,0, 0,50,0);
        setAddPolyg(100,50,0, 100,0,0, 0,50,0);

        setAddPolyg(0,0,30, 100,0,30, 0,50,30);
        setAddPolyg(100,50,30, 100,0,30, 0,50,30);

        setAddPolyg(0,0,30, 0,0,0, 0,50,30);
        setAddPolyg(0,50,0, 0,0,0, 0,50,30);

        setAddPolyg(100,0,30, 100,0,0, 100,50,30);
        setAddPolyg(100,50,0, 100,0,0, 100,50,30);

        setAddPolyg(0,50,0, 0,50,30, 100,50,0);
        setAddPolyg(100,50,30, 0,50,30, 100,50,0);

        setAddPolyg(0,60,0, 90,60,0, 0,110,0);
        setAddPolyg(90,110,0, 90,60,0, 0,110,0);

        setAddPolyg(0,60,30, 90,60,30, 0,110,30);
        setAddPolyg(90,110,30, 90,60,30, 0,110,30);

        setAddPolyg(0,60,30, 0,60,0, 0,110,30);
        setAddPolyg(0,110,0, 0,60,0, 0,110,30);

        setAddPolyg(90,60,30, 90,60,0, 90,110,30);
        setAddPolyg(90,110,0, 90,60,0, 90,110,30);

        setAddPolyg(0,60,0, 0,60,30, 90,60,0);
        setAddPolyg(90,60,30, 0,60,30, 90,60,0);        

    }
    public void paintComponent(Graphics g){
        super.paintComponents(g);
        Rectangle r =  g.getClipRect();
        Color last = g.getColor();
        g.setColor(Color.WHITE);
        g.fillRect(r.x,r.y,r.width,r.height);
        g.setColor(last);
        Graphics2D g2 = (Graphics2D)g;
    }
    
    public int setAddPolyg(double ax, double ay, double az, double bx, double by, double bz, double cx, double cy, double cz)
    {
        if (count < MAXCOUNT)
        {
            pts[count][0].x = ax;
            pts[count][0].y = ay;
            pts[count][0].z = az;
            pts[count][1].x = bx;
            pts[count][1].y = by;
            pts[count][1].z = bz;
            pts[count][2].x = cx;
            pts[count][2].y = cy;
            pts[count][2].z = cz;
            return ++count;
        }
        else 
            return 0;
    }

    public final int MAXCOUNT = 100; 
    public Image[][] pts;
}

public class Image{
    public Image(double x, double y, double z){
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public double x;
    public double y;
    public double z;
}

Вылетает ошибка такого вида: Exception in thread "main" java.lang.NullPointerException




Это сообщение отредактировал(а) alafin - 16.4.2007, 21:50
--------------------
                              http://python.com.ua
PM MAIL   Вверх
nornad
Дата 16.4.2007, 22:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Ну, создал ты массив. А кто конкретный объект создавать за тебя будет?
Код

pts[count][0] = new Image(ax, ay, az);

Не понимаю, зачем тебе объект, если у него все поля наружу... Даже если он просто для хранения данных, всё равно лучше поля спрятать и сделать геттеры-сеттеры.

Добавлено через 44 секунды
В следующий раз перед тем как спросить, посмотри на код в дебаге, пожалуйста.  smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
EvgenZ
Дата 11.6.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: нет
Всего: 11



Подскажите пожалуйста, мой вопрос из той же серии или не совсем? Почему вылетает эксепшн ?

Код

class Proverka
{
    private String mName;
    private int mID;
    
    public Proverka()
    {
        this("JJJ", 1);
    }
    
    public Proverka(String name, int id)
    {
        setMName(name);
        setMID(id);
    }


    public void setMName(String mName) {
        this.mName = mName;
    }

    public void setMID(int mID) {
        this.mID = mID;
    }
    

}


public class Main
{
    public static void main(String[] args)
    {
        Proverka p[] = new Proverka[5];
        
        for(int i = 0; i < p.length; i++)
        {
            p[i].setMName("Proverka"); // здесь
            p[i].setMID(i);                       // и здесь
        } 
    }
}


run:
Exception in thread "main" java.lang.NullPointerException
        at javaapplication1.Main.main(Main.java:46)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Maksym
Дата 11.6.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



EvgenZ
Потому что нужно создать объект класса Proverka прежде чем к нему обращаться.
Код

    public static void main(String[] args)
    {
        Proverka p[] = new Proverka[5];
        
        for(int i = 0; i < p.length; i++)
        {
            p[i] = new Proverka();
            p[i].setMName("Proverka"); // здесь
            p[i].setMID(i);                       // и здесь
        } 
    }

PM MAIL   Вверх
EvgenZ
Дата 11.6.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: нет
Всего: 11



Maksym, ага, толкьо что опытным путем это определил, что в джаве нельзя просто выделить память...
добавляю это:
Код

p[i] = new Proverka("Proverka", i);
 - работает!

как я понял, это из-за того, что выделив память с помощью new я выделил место, и джава присвоила всем выделенным объектам ссылку на null.

Т.е. получается, что везде, где я создаю массив не стандартного типа(не инт, даубл и т.д.), я обязан сначала выделить под массив место 

Код

Proverka p[] = new Proverka[5];
затем создать объект
Код

p[i] = new Proverka("Proverka", i);
 и только потом уже юзать свойства
Код

p[i].setMID(i);  

я правильно понимаю?


Это сообщение отредактировал(а) EvgenZ - 11.6.2007, 21:04


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
nornad
Дата 11.6.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Это верно не только для массивов, но и вообще для объектов.
Проверь на этом:
Код

Long l1, l2;
l1 = new Long();
l1.parse("2");
l2.parse("22");



--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
EvgenZ
Дата 11.6.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: нет
Всего: 11



То, что пока объект не создан, его не существует, это я понимаю.
Я думал, что 
Код

Proverka p[] = new Proverka[5];
 создает пять объектов класса Proverka  smile , а тут оказывается под него просто память выделяется.

З.Ы. спасибо за помощь! smile 


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
nornad
Дата 12.6.2007, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



EvgenZ, если вопрос решён, отметь это при помощи ссылки над первым сообщением в теме.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
EvgenZ
Дата 12.6.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: нет
Всего: 11



Тема не моя, я в чью-то старую вклинился, просто имхо проблема одна и та же smile . Так что не могу пометить решенной.


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0747 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.