Kezdőoldal » Számítástechnika » Programozás » Ebben a metódusban mi a hiba?

Ebben a metódusban mi a hiba?

Figyelt kérdés

private static void kerdes1() {


Scanner beolvas = new Scanner (System.in);

do {

ArrayList lista = new ArrayList();

System.out.println("Szeretne filebol beolvasni a teglalap adatait? (csak i vagy n legyen a valasz)");

String valasz = beolvas.nextLine();

lista.add(valasz);

int listanagysag = lista.size();

}

while (listanagysag != 1);



}


az elől tesztelő ciklus végénél irja ki a while résznél, hogy cannot find symbol, és nem tudtam rájönni, hogy hol a hiba benne:S



2014. dec. 27. 18:15
 1/3 anonim ***** válasza:

Azért, mert ha valamit utasításblokkba teszel, az ott létrehozott dolgok, pl. változók csak abban a blokkban léteznek. Röviden:

do {

int i = 5;

}

while (i == 5);

Itt az i változó a do-t követő utasításblokkban létrejön, de az utasításblokk végén felszabadul, megszűnik létezni. Így a while-nál lévő sorban ez nem létezik. A helyed megoldás:

int i;

do {

i = 5;

}

while (i == 5);

2014. dec. 27. 18:53
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

Néhány pro tippet is kapsz:

1) Ha a Scanner-t példányosítod, az megnyit olvasásra egy ún. adatáramot, stream-et. Ezt illő volna bezárni:

Scanner beolvas = new Scanner (System.in);

//...

beolvas.close();


Persze ma már ezt sem így illik csinálni. Van a try szerkezetnek egy olyan változata, ami a hozzá társított erőforrást automatikusan bezárja (try with resources):

try (Scanner beolvas = new Scanner (System.in)) {


}

//catch (Exception e) {} - ha nem keletkezik kivétel a try-ban, ez elhagyható.


2) A hagyományos ArrayList marha lassú. Ez az OOP alapelvek miatt van így. Valami olyasmin alapul a dolog, hogy "minden személygépkocsi, tehergépkocsi jármű, de nem minden jármű személygépkocsi". Vagyis, egyfajta öröklődési viszony áll fenn az osztályok közt. Ebbe bele lehetne menni, korábban már leírtam. Az ArrayList azt használja ki, hogy mindent Object-ként tárol, amit a gépnek sok műveletbe kerül megvalósítani. Használd helyette a generikus ArrayList<T>-t, vagy a LinkedList<T>-t, ahol a T helyére egy referenciatípust kell beírnod. Pl:

List<Integer> l = new LinkedList<Integer>();


3) A kódodban a ciklusnak mégis mi értelme van? Ha nem EOF-ot, vagy TERM jelet küld a felhasználó, mindig lesz beolvasott adat. Utóbbi két esetben pedig kivétellel összeszarja magát a programod.


4) A do...while pont hogy hátul tesztelő ciklus. Azért, mert előbb végrehajtod a kódot, és csak ezután ellenőrzöd, hogy le kell-e állni.

2014. dec. 27. 19:02
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:

ArrayList lista = new ArrayList();

ezt a sort tedd a ciklus elé

2014. dec. 28. 00:05
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!