Данные из моего класса нулевые? - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть класс, содержащий boolean и два doubles, а затем array этого класса, мне нужно, чтобы boolean и doubles имели значения по умолчанию false, 0.0, and 0.0, а затем У меня есть function, который относится к элементу array, и в тот момент, когда я пытаюсь получить доступ к одной из переменных из класса, он выдает исключение, сообщающее, что он нулевой. Вот мой класс и моя функция, вызывающая его.

    public class PanelData {
        boolean flag = false;
        double tempStart = 0.0;
        double tempEnd = 0.0;
    }

    private PanelData[] panelInfo = new PanelData[115];

private void panelInfoHandler (int i, double timeStart, double timeEnd) throws SQLException
    {
        if (!panelInfo[i].flag) {
            delete();
            insert();
            panelInfo[i].flag = true;
            panelInfo[i].tempStart = timeStart;
            panelInfo[i].tempEnd = timeEnd;
        }
        else if (panelInfo[i].tempStart <= timeStart && panelInfo[i].tempEnd >= timeEnd) {

        }
        else
        {
            insert();
            panelInfo[i].tempStart = timeStart;
            panelInfo[i].tempEnd = timeEnd;
        }
    }

вот как я называю класс.

panelInfoHandler(9, parsedStart, parsedEnd);

Ответы [ 5 ]

6 голосов
/ 21 сентября 2011

new PanelData[115] создает массив 115 пустых ссылок. Вы заполнили panelInfo ссылками на реальные объекты?

Как минимум, вам необходимо выполнить цикл по этому массиву и создать новые экземпляры PanelData для каждого элемента в массиве, например,

for (int i = 0; i < panelInfo.length; i++)
  panelInfo[i] = new PanelData();
2 голосов
/ 21 сентября 2011

Ваш массив полон null элементов, пока вы его не инициализируете. Для пояснения, если вы создаете массив примитивных объектов, вы получаете массив значений по умолчанию (т. Е. 0). Однако создается массив Object с элементами null.

int[] myIntArray = new int[10];  // 10 default values of 0
Integer[] myIntegerArray = new Integer[10];  // 10 null elements
1 голос
/ 21 сентября 2011

Вам нужно сделать что-то вроде

for(int i=0;i<115; i++)
{
   PanelInfo[i] = new PanelData();
}

(или любой другой правильный синтаксис Java)

1 голос
/ 21 сентября 2011

добавить эту строку и затем присвоить значения:

 if(panelInfo[i] == null) panelInfo[i] = new PanelInfo(); 
0 голосов
/ 21 сентября 2011
  public class PanelData {
        boolean flag = false;
        double tempStart;
        double tempEnd;

        public PanelData() {
            flag = false;
            tempStart = 0.0;
            tempEnd = 0.0;    
    }
    private PanelData[] panelInfo = new PanelData[115]; 

    for(int i = 0; i < 115; i++)
       panelInfo[i] = new PanelData();     

Создание конструктора по умолчанию позволяет в этом случае создавать переменные со значениями по умолчанию (false, 0.0, 0.0), чтобы вы могли проверить, возвращаете ли вы ванильный объект или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...