Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++

Hasonló előadás


Az előadások a következő témára: "B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++"— Előadás másolata:

1 B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++

2 Feladat Készítsünk egy komplett konzolos alkalmazást, mely generál egy számot 0 és 100 között (mindkét határt beleértve), feladatunk a szám kitalálása. Beírunk egy tippet, és kapunk egy üzenetet: A szám kisebb a tippedtől! A szám nagyobb a tippedtől! Eltaláltad! A programot írjuk meg, ahogy tudjuk, aztán alakítsuk át az oop elveknek megfelelően, végül alakítsuk át az MVC szemléletnek megfelelően.

3 Magyarázatok Programlogika: Generálunk egy véletlen számot (rndNum)
Bekérünk a konzolról egy számot Megvizsgáljuk a bekért számot: Írtak be valamilyen adatot? Az adat számmá konvertálható? Ha az adat számmá konvertálható, átkonvertáljuk (tipp) Ha nincs beírt adat, vagy nem konvertálható számmá, hibaüzenetet írunk, és visszatérünk a 2. lépéshez Vizsgáljuk a tipp és az rndNum viszonyát, kiírjuk a kiértékelést Ha nem találtuk ki, visszatérünk a 2. lépéshez Ha kitaláltuk, leáll a program

4 Magyarázatok Véletlen szám generálás:
lehetőség: java.lang.Math osztály double random() metódussal, mely 0-1 között generál véletlen számot: lehetőség: java.util.Random osztály int nextInt(n) metódusával, mely a 0 <= x < n tartományban generál véletlen számot: int rnd = (int)(101*Math.random()); Random rnd = new Random(); int rnd = rnd.nextInt(101);

5 Magyarázatok Beolvasás konzolról:
Használjuk a java.util.Scanner osztály nextLine() utasítását: A bekért adat vizsgálata: Hossz ellenőrzése: Adat konvertálása számmá: Scanner sc = new Scanner(System.in); String tippS = sc.nextLine(); if (tippS.length()==0) try { int x = Integer.valueOf(tippS); } catch (NumberFormatException nfe) { ... } int x = Integer.parseInt(tippS);

6 A kód import java.util.Random; import java.util.Scanner;
public class Tipper1 { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { Random rand = new Random(); int rndNum = rand.nextInt(101); boolean success = false, numOK = false; int tipp=0;

7 A kód while (!success) { System.out.print("Kérem a tippet : ");
String tippS = sc.nextLine(); if (tippS.length()==0) {System.out.println("Nem írtál be adatot!");} else { try { tipp = Integer.valueOf(tippS); numOK = true; } catch (NumberFormatException nfe) { numOK = false; System.out.println("Hibás a beírt adat formátuma!"); } if (numOK) { if (rndNum == tipp) { success = true; System.out.println("Eltaláltad"); if (rndNum < tipp) System.out.println("A szám kisebb a tippedtől!"); if (rndNum > tipp) System.out.println("A szám nagyobb a tippedtől!"); } //== end main } //== end program

8 Feladat Számoljuk, hogy hányadik tippel sikerül kitalálni a számot. Az eredmény írjuk ki.

9 A kód import java.util.Random; import java.util.Scanner;
public class Tipper1 { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { Random rand = new Random(); int rndNum = rand.nextInt(101); boolean success = false, numOK = false; int tipp=0, db=0;

10 A kód while (!success) { System.out.print("Kérem a tippet : ");
String tippS = sc.nextLine(); if (tippS.length()==0) {System.out.println("Nem írtál be adatot!"); db++;} else { try { tipp = Integer.valueOf(tippS); numOK = true; db++; } catch (NumberFormatException nfe) { numOK = false; db++; System.out.println("Hibás a beírt adat formátuma!"); } if (numOK) { if (rndNum == tipp) { success = true; System.out.println("Eltaláltad!\nTippek száma: "+db); if (rndNum < tipp) System.out.println("A szám kisebb a tippedtől!"); if (rndNum > tipp) System.out.println("A szám nagyobb a tippedtől!"); } //== end main } //== end program

11 Feladat Próbáljuk úgy átalakítani a kódot, hogy az "üzleti logikát" metódusokba szervezzük. Létrehozandó metódusok: Véletlen egész számot előállító metódus, legyen a neve randomNumber; Adatot beolvasó metódus (neve: readTip), mely kiírja, hogy "Kérem a tippet :", beolvassa azt, és visszaadja a stringet. Adat ellenőrző (check névvel), mely ellenőrzi, hogy üres-e az adat, és hogy számmá alakítható-e. Logikai értéket adjon vissza. Stringet egésszé alakító metódus, legyen a neve StoInt. Kiértékelő metódus (evaluate névvel), mely megkapja a leellenőrzött beolvasott stringet, számmá alakítja, és kiértékeli a tippet (az eredményt kiírja a képernyőre), és számolja a tippeket. Igaz értéket adjon vissza, ha eltaláltuk a számot, hamisat, ha nem. A metódusokat felhasználva írjuk át a főprogramot!

12 A kód Véletlen egész számot előállító metódus, legyen a neve randomNumber; public static int randomNumber() { Random rand = new Random(); return rand.nextInt(101); } Adatot beolvasó metódus (neve: readTip), mely kiírja, hogy "Kérem a tippet :", beolvassa azt, és visszaadja a stringet. public static String readTip() { System.out.print("Kérem a tippet : "); String s = sc.nextLine(); return s; }

13 A kód Adat ellenőrző (check névvel), mely ellenőrzi, hogy üres-e az adat, és hogy számmá alakítható-e. Logikai értéket adjon vissza. public static boolean check(String s) { boolean out = true; if (s.length()==0) { System.out.println("Nem írtál be adatot!"); out = false; } if (out) { try { int x=Integer.valueOf(s); } catch (NumberFormatException nfe) { System.out.println("Hibás a beírt adat formátuma!"); return out;

14 A kód Stringet egésszé alakító metódus, legyen a neve StoInt.
public static int StoInt (String s) { int x = -1; try { x=Integer.valueOf(s); } catch (NumberFormatException nfe) { System.out.println("StoInt: "+nfe.getMessage()); } return x;

15 Kiértékelő metódus (evaluate névvel), mely megkapja a leellenőrzött beolvasott stringet, számmá alakítja, és kiértékeli a tippet (az eredményt kiírja a képernyőre), és számolja a tippeket. Igaz értéket adjon vissza, ha eltaláltuk a számot, hamisat, ha nem. public static boolean evaluate(String s) { boolean ok = false; String mS = ""; int tipp = StoInt(s); db++; if (rndNum == tipp) { mS="Eltaláltad!\nTippek száma: "+db; ok = true; } if (rndNum < tipp) { mS="A szám kisebb a tippedtől!"; if (rndNum > tipp) { mS="A szám nagyobb a tippedtől!"; System.out.println(mS); return ok;

16 A kód A metódusokat felhasználva írjuk át a főprogramot!
public class Tipper1 { static Scanner sc = new Scanner(System.in); static int db = 0; static int rndNum = 0; static boolean success = false; public static void main(String[] args) { rndNum = randomNumber(); while (!success) { String tippS = readTip(); if (check(tippS)) { success = evaluate(tippS); } else db++; }

17 Feladat Újabb fejlesztés következik:
Vezessünk be egy limit nevű változót, ez legyen a véletlen generálás felső határszáma. Csak ezen kelljen változtatni ahhoz, hogy más tartományban működjön a program. Készítsünk egy tájékoztató metódust (inform néven), mely ismerteti a program működését, használatát. Vezessünk be külön üzenetet arra, ha olyan számot tippelünk, ami kívül esik a határon (pl: -10, vagy 200); (Bővítsük az evaluate működési logikáját!) Vezessünk be változókat, és tartsuk nyilván, hogy milyen határokon belül van a kitalálandó érték (a tippelés során ez a tartomány egyre kisebb). Ha a határokon kívül értéket tippelünk, ilyen tartalmú üzenetet adjon az evaluate metódus.

18 A kód Vezessünk be egy limit nevű változót, ez legyen a véletlen generálás felső határszáma. Csak ezen kelljen változtatni ahhoz, hogy más tartományban működjön a program. public class Tipper1 { static int limit = 100; public static int randomNumber() { Random rand = new Random(); return rand.nextInt(limit+1); }

19 A kód Készítsünk egy tájékoztató metódust (inform néven), mely ismerteti a program működését, használatát. public static void inform() { System.out.println("A program generál egy egész számot 0 és " +limit+" között, ezt kell kitalálni!"); System.out.println("Tippelj, és kapsz információt a tippedről!"); } public static void main(String[] args) { rndNum = randomNumber(); inform();

20 A kód Vezessünk be külön üzenetet arra, ha olyan számot tippelünk, ami kívül esik a határon (pl: -10, vagy 200); (Bővítsük az evaluate működési logikáját!) public static boolean evaluate(String s) { ... if (tipp < 0) mS="A tippelt szám kisebb, mint az alsó határ!"; if (tipp > limit) mS="A tippelt szám nagyobb, mint a felső határ!"; System.out.println(mS); return ok; }

21 A kód Vezessünk be változókat, és tartsuk nyilván, hogy milyen határokon belül van a kitalálandó érték (a tippelés során ez a tartomány egyre kisebb). Ha a határokon kívül értéket tippelünk, ilyen tartalmú üzenetet adjon az evaluate metódus. public class Tipper1 { static Scanner sc = new Scanner(System.in); static int db = 0; static int rndNum = 0; static boolean success = false; static int limit = 100; static int min = 0; static int max = limit;

22 Az evaluate metódus kódja
public static boolean evaluate(String s) { boolean ok = false; String mS = ""; int tipp = StoInt(s); db++; if (rndNum == tipp) { mS="Eltaláltad!\nTippek száma: "+db; ok = true; } if (rndNum < tipp) { mS="A szám kisebb a tippedtől!"; if (tipp <= max) max = tipp; //Miért kell az if? if (rndNum > tipp) { mS="A szám nagyobb a tippedtől!"; if (tipp >= min) min = tipp; //Miért kell az if? if (tipp > max) mS="A tippelt szám nagyobb, mint a már ismerhető legnagyobb érték!"; if (tipp < min) mS="A tippelt szám kisebb, mint a már ismerhető legkisebb érték!"; if (tipp < 0) mS="A tippelt szám kisebb, mint az alsó határ!"; if (tipp > limit) mS="A tippelt szám nagyobb, mint a felső határ!"; System.out.println(mS); return ok; Az evaluate metódus kódja

23 Házi feladat Úgy átírni a kódot, hogy a teljes üzleti logika egy másik (mondjuk Controller nevű) osztályba kerüljön! A főprogram valahogy így nézzen ki: Ahol a con egy Controller példány. public static void main(String[] args) { rndNum = con.randomNumber(); con.inform(); while (!success) { String tippS = con.readTip(); if (con.check(tippS)) { success = con.evaluate(tippS); } else con.dbplus(); }

24 V É G E VÉGE


Letölteni ppt "B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++"

Hasonló előadás


Google Hirdetések