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

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Jt Java Feltételek, logikai kifejezések. jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró.
Hibakezelés és Tesztelés a Visual Studio.NET-ben
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
Tömbök ismétlés Osztályok Java-ban Garbage collection
Egy feladat megoldásának gondolatmenete. Feladat: Generáljuk véletlen számokat 1 és 6 között, amíg legalább 10 darab egyes és 10 darab hatos nem lesz.
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
Java programozási nyelv 5. rész – Osztályok III.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Programozás I. Ciklusok
Kivételkezelés.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Programozás C# -ban Tömbök.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Tömbök és programozási tételek
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Java programozási nyelv Filekezelés
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Egyenesvonalú (lineáris) adatszerkezetek
Operátorok Vezérlési szerkezetek Gyakorlás
Free pascal feladatok
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Excel programozás (makró)
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Statisztikai és logikai függvények
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Típusosztályok. Számosztályok. Math és StrictMath matematikai.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
Párhuzamos programozás
Gépészeti informatika (BMEGEMIBXGI)
C# SZINTAKTIKÁJA Az egyes utasítások végén pontosvessző áll
Programozás C# -ban Elágazások.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hálózatkezelés Java-ban
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
B M Java Programozás 7. Gy: Java alapok IT A N Adatkezelő 3.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Szálszinkronizáció.
B M Java Programozás 6. Gy: Java alapok IT A N Adatkezelő 2.rész
B M Java Programozás 2. Gy: Java alapok IT A N Adatszerkezetek
B M Java Programozás 8. Gy: Java alapok IT A N Adatkezelő 4.rész
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Függvénysablonok használata
Előadás másolata:

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

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.

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

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);

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);

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;

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

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

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;

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

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!

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; }

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;

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;

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;

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++; }

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.

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); }

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();

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; }

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;

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

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(); }

V É G E VÉGE