Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > variable ... might not have been initialized ???


Автор: Nin 28.10.2004, 13:40
привет всем !!! ...
компилятор выдаёт такую ошибку ... почему?

javac -source 1.4 -d /Users/users/ildar/out/hcss/lib @/tmp/jake43502.tmp
//.automount//fileserver.astro.rug.nl//root//Users//users//ildar//source//herschel//ia//numeric//function//fit//VerifyHrs//VerifyHrsTuning.java:179: variable Czero might not have been initialized
Czero[i] = FramesInput1[(4 + (2*i + 1)*258)];
^
//.automount//fileserver.astro.rug.nl//root//Users//users//ildar//source//herschel//ia//numeric//function//fit//VerifyHrs//VerifyHrsTuning.java:180: variable duration might not have been initialized
duration[i] = FramesInput1[(2 + (2*i + 1)*258)];
^
//.automount//fileserver.astro.rug.nl//root//Users//users//ildar//source//herschel//ia//numeric//function//fit//VerifyHrs//VerifyHrsTuning.java:182: variable CStar might not have been initialized
CStar[i] = (double)( ( 2 * Czero[i] - duration[i] ) / duration[i] );
^
//.automount//fileserver.astro.rug.nl//root//Users//users//ildar//source//herschel//ia//numeric//function//fit//VerifyHrs//VerifyHrsTuning.java:185: variable attenuators1 might not have been initialized
attenuators1[i] = 6.5;
^
//.automount//fileserver.astro.rug.nl//root//Users//users//ildar//source//herschel//ia//numeric//function//fit//VerifyHrs//VerifyHrsTuning.java:186: variable flag might not have been initialized
flag[i] = false;

а это кусок ошибочного кода...

double limit = 2586;
boolean[] flag;
double[] Czero;
double[] CStar;
double[] duration;
double[] attenuators1;
double[] attenuators2;
int i = 0;
double FramesInput1[] = HHDFrame1.getFrame();
while (i < 8) {
Czero[i] = FramesInput1[(4 + (2*i + 1)*258)];
duration[i] = FramesInput1[(2 + (2*i + 1)*258)];

CStar[i] = (double)( ( 2 * Czero[i] - duration[i] ) / duration[i] );

if (CStar[i] < limit ) {
attenuators1[i] = 6.5;
flag[i] = false;
} else {
attenuators1[i] = 13;
flag[i] = true;
}


i++;
}
//call report // FIXME <------
i = 0;
while (i < 8) {
Czero[i] = FramesInput1[(4 + (2*i + 1)*258)];
duration[i] = FramesInput1[(2 + (2*i + 1)*258)];

Может кто подскажет?

Автор: Sun 28.10.2004, 13:46
Это значит, что была попытка обратится к переменной, значение которой не было определенно. Нужно его определить хотя-бы равным null.

Автор: TrivialCore 28.10.2004, 13:53
Надо инициализировать массив. Для каждого из них:
Код
Czero = new double[100];
соответственно вставляя размер и имя массива.

Автор: Nin 28.10.2004, 13:55

И как это я и сам не догадался :D , большое спасибо, Работает !!!

Автор: redrick 29.10.2004, 03:28
на самом деле вот это
TrivialCore
Цитата

Надо инициализировать массив. Для каждого из них:
Код
Czero = new double[100];
соответственно вставляя размер и имя массива.

имхо вовсе не обязательно - так создается лишний объект-массив
а суть ошибки действительно в том, что не проинициализированн он может оказаться (например если метод FramesInput1() вывалится с ексепшеном). Чтобы этого избежать нужно просто гарантировать наличие объекта, на который будет ссылаться ссылка. Хотя TrivialCore-способ вроде действительно самый простой и понятный.

Автор: TrivialCore 29.10.2004, 10:14
FramesInput - это массив, а не метод. Ты наверное имел ввиду метод getFrame().
На самом деле - нет! Приписание значений ячейкам массива должно проис-ходить после инициализации массива, поэтому это даже не зависит от того, что содержит FramesInput. Инициализация массива с помощью new - обязательна.

Автор: redrick 29.10.2004, 10:57
ой - ячейкам... вроде да - извини пожалуйста - ночью приколбасило что-то =) спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)