Kezdőoldal » Számítástechnika » Programozás » Javában hogyan tudom ezt...

Javában hogyan tudom ezt megcsinálni?

Figyelt kérdés

Le kell ellenőriznem, hogy megfelelő számot válaszottak-e. 1, 2, 3 és 9es számot lehet választani, ha rossz számít ír be a terminálba akkor újra kell kérdeznem.


do whilelal akartam megoldani, de még nem használtam ezért nem értem mit rontok el. Valaki letudja írni helyesen vagy hogy mit kéne használnom.


do {

System.out.println("Select an option:");

userInput = sc.nextInt();

System.out.println(userInput);

} while (userInput != 1 || userInput != 2 || userInput != 3 || userInput != 9);


if (userInput == 9){

run = false;

}


Gondolom az a probléma hogy a ha pl.: 2-t ad a felhasználó akkor az nem lesz egyenlő 1-el meg többi számmal így örökké menni a fog a while. Hogyan oldanátok meg elegánsan? Egy plusz methoddal ami vissza ad egy boolean-t?



2017. okt. 29. 21:01
1 2
 1/11 A kérdező kommentje:

do {

System.out.println("Select an option:");

userInput = sc.nextInt();

System.out.println(userInput);

} while (isvalid(userInput));


if (userInput == 9){

run = false;

}


public boolean isvalid(int userInput){

boolean isValid = true;


if (userInput == 1){

isValid = false;

} else if (userInput == 2){

isValid = false;

} else if (userInput == 3){

isValid = false;

} else if (userInput == 9){

isValid = false;

}


return isValid;

}



Ezzel megoldottam, de olyan rondának nézki meglehet jobban oldani?

2017. okt. 29. 21:05
 2/11 anonim ***** válasza:

Az első kóddal az volt a gond, hogy || műveleteket használtál, tehát a while(a || b || c || d) azt jelentette, hogy amíg FENNÁLL az, hogy 'a', vagy hogy 'b', vagy hogy 'c', vagy hogy 'd', addig folytassa a ciklust. Tehát a ciklusod csak akkor lépett volna ki, ha a beolvasott érték egyszerre 1,2,3 és 9 is. Ez nyilván lehetetlen :D


Most hogy külön függvénybe kiszervezted még mindig fennáll az a probléma, hogy totál meg van fordítva a logika. Az IsValid függvénynek akkor kéne false-ot visszaadnia, amikor NEM érvényes értéket kap, és a ciklusnak addig kéne mennie, amíg fennáll, hogy NEM IsValid. (Ezt jegyezd meg, a WHILE ciklusfeltételt úgy értelmezzük, hogy "amíg fennáll, hogy")


Tehát első lépés a while-ban megfordítani a feltételt. Utána megfordítani a függvény kiértékelését, hogy akkor legyen true, ha 1,2,3 vagy 9 jön paraméterül. Egyben össze is vonhatjuk a sok if-et egyetlen kifejezésbe:


if(userInput == 1 || userInput == 2 || userInput == 3 || userInput == 9)

return true;


Vagy rögtön vissza is adhatod a logikai kiértékelés eredményét:


return (userInput == 1 || userInput == 2 || userInput ==3 || userInput == 4);

2017. okt. 29. 22:03
Hasznos számodra ez a válasz?
 3/11 anonim válasza:
Függvénybe rakod
2017. okt. 30. 06:45
Hasznos számodra ez a válasz?
 4/11 anonim válasza:
Lehet hogy javában nincs függvény, mert én C++-t tanulok, de ha van akkor ha :)
2017. okt. 30. 06:46
Hasznos számodra ez a válasz?
 5/11 anonim ***** válasza:

Használj tömböket, valahogy így:


int promptOption() {

int[] validOptions = new int[] {1, 2, 3, 9};

int option;


do {

option = sc.nextInt();

} while (!Arrays.toList(validOptions).contains(option));


return option;

}

2017. okt. 30. 08:42
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:
#5 Ez működő megoldás, csak teljesen felesleges 4 darab integer miatt ez "Csináljunk egy tömböt, azt aztán rakjuk át listába, aztán a listában keressük meg" hókamóka. Valamilyen szempontból szép, csak ágyúval verébre kategória. Plusz ezzel átugorjuk a logikai kifejezések írását, amiben a kérdezőnek láthatóan vannak hiányosságai.
2017. okt. 30. 13:16
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

#6 Egyrészt tömbök és a contains függvény használatával jóval érthetőbb kódot ír, másrészt karbantarthatóbb is az eredmény, harmadrészt pedig "élesben" inkább fog ezzel a formával találkozni.


Teljesen felesleges olvashatatlan feltételek tömegével megszórni a kódot, amikor vannak rá jóval olvashatóbb és karbatarthatóbb megoldások. Tegyük hozzá, hogy minnél egyszerűbb a feltétel, annál könnyebb megértenie és tovább lépnie. Márpedig azt vizsgálni, hogy "tartalmaz/nem tartalmaz" még mindig sokkal egyszerűbb, mint egyesével explicit megvizsgálni az értékeket.

2017. okt. 30. 14:45
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:

"Plusz ezzel átugorjuk a logikai kifejezések írását, amiben a kérdezőnek láthatóan vannak hiányosságai."


TOvábbra is kitartok amellett, amit mondtam.

2017. okt. 30. 16:47
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:

#8 Értem, amit mondasz, hogy gyakorlat teszi a mestert, csak én meg marha sok olyan esettel találkoztam, amikor a delikvensnek rögzült ez a fajta kódolási módszer (ti. hogy egymás után hány repetitiív módon kódokat), azt alkalmazta "élesben" is, és olyan ocsmány kódot hagyott maga után, hogy az ember szálanként tépi tőle a haját.


Messzebbre jut szerintem, ha nem így gyakorolja a feltételek megfogalmazását, hanem úgy, ha értelme is van annak, amit csinál, és nem csak gányol.

2017. okt. 31. 09:22
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:

#9 Én meg picit a másik oldalról nézem a dolgot, millió olyan kódot láttam már, hogy egy programozó anynira el van szállva a beépített függvényekkel, hogy szabályosan megtöbbszörözi a program futási idejét, mert szó szerint mindenre valami beépített cuccmákot hív meg, bele se gondolva, hogy mennyi fölösleges mukát végez emaitt a háttérben a program.


Hogy egy hasonlattal éljek, Petike le akar ugrani a két sarokra levő boltba, ezért elsétál a buszmegállóba ami ott van 10 méterre a házától, felszáll a buszra, tesz vele egy teljes kört, hogy végül a bolt előtt levő megállóban leszálljon róla. AZtán hazafelé természetesen megvárja a következő buszt hogy azon az 50 méteren elvigye. NAgyon sok ilyen programozóval találkoztam, aki csak azt látja, hogy milyen hosszú a kód amit írt, és milyen egyszerű olvasni, de abba nem gondol bele, hogy a rövidke kis kód mögött milyen algoritmusok mozognak, és mennyi fölösleges munkát végez vele.

2017. okt. 31. 15:15
Hasznos számodra ez a válasz?
1 2

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!