Local variable hides a field – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Local variable hides a field – Java – Fórum – Programujte.comLocal variable hides a field – Java – Fórum – Programujte.com

 

plaski
~ Anonymní uživatel
6 příspěvků
11. 10. 2013   #1
-
0
-

   

ahoj jsem začínající začátečník, 

a nemůžu přijít na to, kde je chyba. Problém mi dělá proměnná LoLesn. Z nějakého důvodu, jakoby se její hodnota při přechodu k další metodě změnila na nulovou. No a když je nulová tak mi to potom háže chybu, protože LoLesn je dělitelem a ten jak známo nuly být nesmí.

Ned Beans mi u LoLesn ukazuje žárovku a hlášku -local variable hides a field-, což si vykládám jako že v té metodě mám stejné jméno lokální proměnné jako je proměnná instanční/field...nevím, možná trochu matu pojmy, studuju to v češtině i angličtině...Co mě mate je, že u jiných proměnných, které podle mě používám stejně jako LoLesn se mi to nestává. 

Řek bych, že potíž je nejspíš v tom, že mi není úplně jasný právě ten rozdíl mezi instanční a lokální proměnnou (ačkoli sem si věřil, že je to jasné).

Budu vděčný za každou radu, případně i za jiné poznámky (třeba něco dělám úplně blbě). Moc děkuju.

Krizové řádky jsou:

315 tam je to dělení, kde se mi LoLesn Objevuje nulová292 - přetypování LoLesn na integer

Jo, zkoušel jsem debug. LoLesn nabrala na 292 správnou hodnotu z tlačítka, ale pak se někde nevím proč místě zase změnila na nulu. 

  


220     }// </editor-fold>
221 int txtDay;
222 int txtMonth;
223 int txtYear;
224 int resultTrack;
225 int LoLesn;
226 int LPWeekI;
227 String Vysledek;
228 //int weeks;
229     private void ComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
230 String Track = (String)ComboBox1.getSelectedItem( );
231 
232    switch(Track)
233       {
234        case "general" :
235                    resultTrack=64;
236             break;
237          case "professional":
238                   resultTrack=60;
239              break;
240          case "exam":
241                        resultTrack=120;
242             break;
243          case "communicative" :
244             resultTrack=20;
245                      break;
246 
247     }
248      System.out.println(resultTrack);
249     }
250 
251     private void LessonsPerWeekActionPerformed(java.awt.event.ActionEvent evt) {
252    String LPWeek = (String)LessonsPerWeek.getSelectedItem( );
253 
254    int LPWeekL = Integer.parseInt(LPWeek);
255 LPWeekI=LPWeekL;
256 System.out.println(LPWeekI);
257    // TODO add your handling code here:     // TODO add your handling code here:
258     }
259 
260     private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
261         // TODO add your handling code here:
262     }
263 
264     /*
265     private void buttonResultActionPerformed(java.awt.event.ActionEvent evt) {
266 
267     }
268 */
269     private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
270         // TODO add your handling code here:
271     }
272 
273     private void jTextField3ActionPerformed(java.awt.event.ActionEvent evt) {
274         // TODO add your handling code here:
275     }
276 
277     private void jTextField5ActionPerformed(java.awt.event.ActionEvent evt) {
278         // TODO add your handling code here:
279     }
280 
281     private void LessonsPerWeek1ActionPerformed(java.awt.event.ActionEvent evt) {
282         // TODO add your handling code here:
283     }
284 
285     private void TxtResultActionPerformed(java.awt.event.ActionEvent evt) {
286         // TODO add your handling code here:
287     }
288 
289     private void ButtonLoLActionPerformed(java.awt.event.ActionEvent evt) {
290   String Lol = (String)ButtonLoL.getSelectedItem( );
291 
292 int LoLesn = Integer.parseInt(Lol);
293 
294 System.out.println(LoLesn);
295 
296     }
297 
298 private void buttonResultActionPerformed(java.awt.event.ActionEvent evt) {
299 
300     try
301        {
302   System.out.println(LoLesn);
303   String Day = (String)cbxDay.getSelectedItem( );
304   int iDay = Integer.parseInt(Day);
305   System.out.println(iDay);
306   String Month = (String)cbxMonth.getSelectedItem( );
307   int iMonth = Integer.parseInt(Month);
308   System.out.println(iMonth);
309   String Year = (String)cbxYear.getSelectedItem();
310   int iYear = Integer.parseInt(Year);
311   System.out.println(iYear);
312 
313   Calendar c = Calendar.getInstance();
314   c.set(iYear, iMonth, iDay);
315   int Weeks = (resultTrack*45)/(LoLesn*LPWeekI);
316   System.out.println("LoLesn" + LoLesn);
317   System.out.println(Weeks);
318 
319 
320  int dateUkonceniKurzu =  c.get(Calendar.MONTH) + Weeks;
321  System.out.println(dateUkonceniKurzu + c.get(Calendar.DATE) + "-" + c.get(Calendar.YEAR));
322  String sdateUkonceniKurzu = Integer.toString(dateUkonceniKurzu);
323  TxtResult.setText(sdateUkonceniKurzu);
324        }
325         catch (ArithmeticException v){
326             System.out.println("chyba:" + v);
327         }
328   }
329 
330 
Nahlásit jako SPAM
IP: 77.104.225.–
KIIV
~ Moderátor
+43
God of flame
11. 10. 2013   #2
-
0
-

na to, ze netbeans by to mel zarovnavat sam, je to priserna zmet radobyodsazovani...

a k otazce - kdyz udelas:

int LoLesn;

nekde dal pak v jakesi metode:

int LoLesn = Integer.parseInt(Lol);

a v jine metode nakonec nevidis LoLesn tak se nediv... jestli ti to nekde jinde funguje tak jedine proto ze si se v necem spletl... bud to nastavujes do ty tridni driv nez ji preplacnes lokalni, nebo mas lokalni jinak pojmenovanou a jeste do ni nezapises ci tak... :)

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
plaski
~ Anonymní uživatel
6 příspěvků
11. 10. 2013   #3
-
0
-

#2 KIIV
jo, dík, super, to by mohlo být ono. kouknu na to.

Ale, ted mě tak napadá...když jsem zkoušel ten debug, tak nejprve se do proměnné LoLesn správně načetla hodnota 60, a pak byla správná hodnota 60 vidět i dole v tom zlomku! Jenže to nakonec stejně hodilo chybu.

K té změti rádobyodsazování...já měl malinko problém s tím, jak tady ten program dostat. Když sem to různě kopnul do wordu, tak se to jaxi rozhodilo, pak jsem to eště zkoušel nějak přes html či co. ALe moc jsem to nestudoval, jaxem byl nervní, že mi to nefunguje :-) To odsazování - hraje role jen kvůli přehlednosti, je tak?

ještě asi jeden kacířský dotaz či ověření.....jak tedy tu hodnotu dostanu z jedné do jiné metody? já měl právě zato, že když je proměnná instanční, tak platí pro celou třídu...

v každém případě moc díky za tip 

Nahlásit jako SPAM
IP: 77.104.225.–
KIIV
~ Moderátor
+43
God of flame
11. 10. 2013   #4
-
0
-

debugem si mohl sledovat tu lokalni

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
plaski
~ Anonymní uživatel
6 příspěvků
11. 10. 2013   #5
-
0
-

 To sem zkoušel. lokální se načetla správně, vytiskla se správně. Ale vté další metodě už byla zas ta hodnota, kterou jsem deklaroval na začátku. Nebo nejspíš nechápu přesně co myslíš tím sledovat tu lokální.

No nicméně...pozorně jsem se koukal jeslti tam nemám chybu. Mám tam eště proměnnou na ř 254 LPWeekI, se kterou pracuju úplně stejně jako stou problematickou. Jenže Net Beans me tu LPWeekI zabarví žlutou, což má asi znamenat, že ta proměnná je jedna.

Ale když sem to zkusil u té druhé   na ř. 290 - LoLesn, tak to zabarvilo bud jen tu v lokální, anebo jen ty mimo ni. To znamená, že to bere jako dvě různé proměnné. Myslel sem si, jestli nemám chybu v písmenku, tak jsem to zkopíroval, aby v instanční i lokální byl 100% stejný název, ale nepomohlo. 

Tak sem z toho jelen, daněk a srnec :-).

221 int txtDay;
222 int txtMonth;
223 int txtYear;
224 int resultTrack;
225 int LoLesn;
226 int LPWeekI;
227 String Vysledek;
228 //int weeks;
229     private void ComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
230 String Track = (String)ComboBox1.getSelectedItem( );
231 
232    switch(Track)
233       {
234        case "general" :
235                    resultTrack=64;
236             break;
237          case "professional":
238                   resultTrack=60;
239              break;
240          case "exam":
241                        resultTrack=120;
242             break;
243          case "communicative" :
244             resultTrack=20;
245                      break;
246 
247     }
248      System.out.println(resultTrack);
249     }
250 
251     private void LessonsPerWeekActionPerformed(java.awt.event.ActionEvent evt) {
252    String LPWeek = (String)LessonsPerWeek.getSelectedItem( );
253    int LPWeekL = Integer.parseInt(LPWeek);
254 LPWeekI=LPWeekL;
255 System.out.println(LPWeekI);
256    // TODO add your handling code here:     // TODO add your handling code here:
257     }
258 
259     private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
260         // TODO add your handling code here:
261     }
262 
263     /*
264     private void buttonResultActionPerformed(java.awt.event.ActionEvent evt) {
265 
266     }
267 */
268     private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
269         // TODO add your handling code here:
270     }
271 
272     private void jTextField3ActionPerformed(java.awt.event.ActionEvent evt) {
273         // TODO add your handling code here:
274     }
275 
276     private void jTextField5ActionPerformed(java.awt.event.ActionEvent evt) {
277         // TODO add your handling code here:
278     }
279 
280     private void LessonsPerWeek1ActionPerformed(java.awt.event.ActionEvent evt) {
281         // TODO add your handling code here:
282     }
283 
284     private void TxtResultActionPerformed(java.awt.event.ActionEvent evt) {
285         // TODO add your handling code here:
286     }
287 
288     private void ButtonLoLActionPerformed(java.awt.event.ActionEvent evt) {
289   String Lol = (String)ButtonLoL.getSelectedItem();
290 int LoLesn = Integer.parseInt(Lol);
291 
292 System.out.println(LoLesn);
293 
294     }
295 
296 private void buttonResultActionPerformed(java.awt.event.ActionEvent evt) {
297 
298     try
299        {
300   System.out.println(LoLesn);
301   String Day = (String)cbxDay.getSelectedItem( );
302   int iDay = Integer.parseInt(Day);
303   System.out.println(iDay);
304   String Month = (String)cbxMonth.getSelectedItem( );
305   int iMonth = Integer.parseInt(Month);
306   System.out.println(iMonth);
307   String Year = (String)cbxYear.getSelectedItem();
308   int iYear = Integer.parseInt(Year);
309   System.out.println(iYear);
310 
311   Calendar c = Calendar.getInstance();
312   c.set(iYear, iMonth, iDay);
313   int Weeks = (resultTrack*45)/(LoLesn*LPWeekI);
314   System.out.println("LoLesn" + LoLesn);
315   System.out.println(Weeks);
316 
317 
318  int dateUkonceniKurzu =  c.get(Calendar.MONTH) + Weeks;
319  System.out.println(dateUkonceniKurzu + c.get(Calendar.DATE) + "-" + c.get(Calendar.YEAR));
320  String sdateUkonceniKurzu = Integer.toString(dateUkonceniKurzu);
321  TxtResult.setText(sdateUkonceniKurzu);
322        }
323         catch (ArithmeticException v){
324             System.out.println("chyba:" + v);
325         }
326   }
Nahlásit jako SPAM
IP: 77.104.225.–
KIIV
~ Moderátor
+43
God of flame
11. 10. 2013   #6
-
0
-

kdyz vymenis:
int LoLesn = Integer.parseInt(Lol);
za:

LoLesn = Integer.parseInt(Lol);
melo by to fungovat

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
plaski
~ Anonymní uživatel
6 příspěvků
11. 10. 2013   #7
-
0
-

aha, to zkusím, ačkoli jsem zatím moc nepochopil, proč :-(. Tak jdu myslet

V každém případě díííííky moc.

Nahlásit jako SPAM
IP: 77.104.225.–
plaski
~ Anonymní uživatel
6 příspěvků
11. 10. 2013   #8
-
0
-

Tyjo, zázrak, ono to opravdu funguje :-). Skvělé, děkuju. Teď eště vyluštit proč :-).

Nahlásit jako SPAM
IP: 77.104.225.–
KIIV
~ Moderátor
+43
God of flame
11. 10. 2013   #9
-
0
-

int neco;   je definice promenne.. kdyz dojde ke kolizi jmen tak ma prednost lokalni pred tridni -- k tridni se muzes dostat tak jak tak, ale nevidet tu lokalni, tak by byla uplne zbytecna...

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
plaski
~ Anonymní uživatel
6 příspěvků
11. 10. 2013   #10
-
0
-

jo, super. Ještě jednou dík.

Nahlásit jako SPAM
IP: 77.104.225.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 48 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý