| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Надо инициализировать массив. Для каждого из них:
|
| Автор: Nin 28.10.2004, 13:55 |
| И как это я и сам не догадался |
| Автор: redrick 29.10.2004, 03:28 | ||
| на самом деле вот это TrivialCore
имхо вовсе не обязательно - так создается лишний объект-массив а суть ошибки действительно в том, что не проинициализированн он может оказаться (например если метод FramesInput1() вывалится с ексепшеном). Чтобы этого избежать нужно просто гарантировать наличие объекта, на который будет ссылаться ссылка. Хотя TrivialCore-способ вроде действительно самый простой и понятный. |
| Автор: TrivialCore 29.10.2004, 10:14 |
| FramesInput - это массив, а не метод. Ты наверное имел ввиду метод getFrame(). На самом деле - нет! Приписание значений ячейкам массива должно проис-ходить после инициализации массива, поэтому это даже не зависит от того, что содержит FramesInput. Инициализация массива с помощью new - обязательна. |
| Автор: redrick 29.10.2004, 10:57 |
| ой - ячейкам... вроде да - извини пожалуйста - ночью приколбасило что-то =) спасибо |