Java SE 8 API dokumentációja

Utolsó módosítás: 2016.09.28.

Feladatok

  1. Készítsünk programot, mely kiírja a Fibonacci sorozat első \(n\) elemét! Az \(n\) értékét várja argumentumként a program!

    1. A sorozat első \(n\) elemét tároljuk le egy tömbben, majd egy külön iterációban irassuk ki az elemeket!

    2. A sorozat első \(n\) elemét tároljuk le egy tömbben, majd használjuk a java.util.Arrays.toString() metódust a kiíratásra!

  2. Készítsünk a util csomagon belül egy IntVector osztályt, mely egészek sorozatát ábrázolja!

    1. Legyen egy tömb adattag, mely a sorozatot tárolja. Tegyük rejtetté!

    2. Adjunk az osztályhoz egy konstruktort, mely egy egészekből álló tömböt vár paraméterül! Ügyeljünk, hogy a belső állapotot ne szivárogtassuk ki!

    3. Vegyünk fel egy add() metódust, mely a sorozat minden eleméhez hozzáad egy paraméterül kapott egész számot!

    4. Írjunk egy toString() metódust is, mely felsorolja a számokat szóközzel elválasztva. Például: [1 2 3]

  3. Készítsünk egy Calculator programot, mely egy számsorozatot és egy számot kap argumentumként. A program a számsorozat minden eleméhez hozzáadja a második argumentumot. Például:

    $ java Calculator 1,2,3 5
    [6 7 8]

    Használjuk az előbb megírt util.IntVector osztályt!

  4. Alakítsuk át az util.IntVector osztályt, hogy tömb helyett java.util.LinkedList<A> láncolt listában tárolja a számsorozatot!

  5. Egyszerűsítsük le a Calculator programot a java.util.Scanner osztállyal!

    A java.util.Scanner legfontosabb műveletei a nextInt() és a hasNextInt().

  6. Készítsünk programot, mely eldönti egy argumentumként megadott szövegről, hogy palindrom vagy sem!

    Palindromnak nevezünk egy szót vagy kifejezést, ha visszafele olvasva ugyanazt kapjuk.

    1. Feltesszük, hogy csak egy szót kapunk argumentumként.

      Például:

      $ java Palindrome noon
      true
      
      $ java Palindrome radar
      true
      
      $ java Palindrome tree
      false
    2. Szorgalmi. Egészítsük ki úgy a programot, hogy az ne csak szavakat, hanem több szóból álló kifejezéseket is elfogadjon.

      Például:

      $ java Palindrome "race car"
      true
  7. Írjunk egy programot, mely kicseréli egy szöveg minden kisbetűjét nagybetűre, minden nagybetűt kisbetűre, minden számjegyéhez hozzáad egyet és minden más karaktert aláhúzásjelre cserél!

    Az egyes karakterek besorolásához használjuk a java.lang.Character osztály statikus metódusait.

  8. Készítsünk egy olyan függvényt, mely egy paraméterül kapott String szavainak sorrendjét megfordítja, de a szavakat változatlanul hagyja!

    Például:

    $ java ReverseWords "Alma fa alatt"
    alatt fa Alma
  9. Írjunk egy math.Vector osztályt, melyben az alábbi metódusok szerepelnek:

    1. A statikus dotProduct() paraméterül vár két lebegőpontos értékekből álló tömböt és visszaadja a skaláris szozatukat. Ha a két tömb \(a\) és \(b\), akkor a skaláris szozatuk \(\sum_{i} a_i \times b_i\)

    2. Szorgalmi. A statikus crossProduct() paraméterül vár két lebegőpontos értékekből álló, kételemű tömböt és az általuk bezárt szöget radiánban, és visszaad egy harmadik, háromelemű tömböt, melyben a paraméter tömbök vektoriális szozata szerepel.

  10. Haladóknak. Írjunk egy programot, mely a szabványos bemenetről egész számokat olvas be, és megadja a hosszát és a kezdetét a leghosszabb egymást követő azonos számok sorozatának! Egy példa futás az alábbi:

     java Longest
     ~> 1
     ~> 4
     ~> 4
     ~> 3
     ~>
     start:  2
     length: 2

    Használjuk a java.util.Scanner osztály nextInt(), hasNextInt() metódusait.

  11. Szorgalmi. Készítsünk egy publikus utils.NumericArrays osztályt, melyben szerepelnek az alábbi statikus metódusok. Mindhárom metódus paraméterül vár egy double értékekből álló tömböt.

    Készítsünk egy NumericArrayDemo osztályt is egy main() metódussal, mely argumentumként várja az elvégzendő feladatot (sum, avg vagy norm) és a számsorozatot! Ez utóbbit vesszóvel elválasztva adjuk meg:

      java NumericArrayDemo sum 1,2,3
      6
    
      java NumericArrayDemo norm 1,2,1
      [0.25, 0.5, 0.25]
  12. Írjunk egy math.Matrix osztályt, melyben néhány mátrixműveletet valósítunk meg! Ezek az alábbiak:

    1. A plus() objektumszintű metódus paraméterül vár két kétdimenziós tömböt, melyeket összeadja. Az eredményt egy harmadik tömbben adja vissza.

      Az \(A\) és a \(B\) mátrix összegét megkapjuk a \(\sum_{i=0}^{n} \sum_{j = 0}^{m} A_{ij} + B_{ij}\) kiszámításával.

    2. Haladóknak. Hasonlóan a plus() metódushoz, készítsünk egy multiply() metódust, mely paraméterül vár két kétdimenziós tömböt, és a szorzás eredményét egy új tömbben adja vissza!

      Az \(A\) és a \(B\) mátrix \(C\) szorzatát megkapjuk a \(C_{ij} = \sum_{k = 0}^n A_{ik} \times B_{jk}\) kiszámításával minden \(i\), \(j\)-re.

  13. Bónusz: készítsük el az aknakereső játék alapjait!

    1. Hozzuk létre a game.Minesweeper publikus osztályt!

    2. Készítsünk egy createTable() metódust, mely paraméterül vár egy p valószínűséget és m, n egész számokat, és feltölt egy kétdimenziós, m sorból és n oszlopból álló logikai értékeket tartalmazó tömböt (a játéktáblát), ahol minden elem egy adott \(p\) valószínűséggel lesz logikai igaz. Ott lesznek az aknák, ahol az elem értéke logikai igaz.

      Egy \(p\) eloszlású \(x\) indikátorváltozót a java.lang.Math.random() metódus segítségével tudunk előállítani:

      boolean x (double p) {
        return Math.random() < p;
      }

      A fenti x metódust \(p\) valószínűséggel fog logikai igaz értéket, \(1-p\) valószínűséggel hamis értéket visszaadni.

    3. Ez alapján készítsünk egy másik, solve() nevű függvényt, mely paraméterül vár egy aknakereső játéktáblát (kétdimenziós logikai tömböt), és visszaad egy egészekből álló kétdimenziós tömböt! A paraméter tömb és az eredmény tömb méretei azonosak.

      Az eredmény tömbben egy elem azt jelöli, hogy a szomszédjában hány akna található. Ez lesz az aknakereső játék megoldása.

    4. Készítsünk egy-egy függvényt a logikai és a számokból álló tömb szöveggé alakítására! A függvények az átalakítandó tömböt paraméterül várják és szöveget adnak vissza.

      Mindkét függvényben az akna helyére kerüljön csillag. A logikai tömbnél az aknamentes helyekre kerüljön pont.

      A végeredmény hatékony előállításához használjuk a java.lang.StringBuffer osztályt.

    5. Írjunk egy program.Main osztályt! Ebben helyet kap a main() metódus, mely egy sorban kéri be a szabványos bemenetről az aknakereső tábla méretét és a \(p\) valószínűséget! A szabványos kimenetre írjuk ki mindkét táblát!

      A beolvasás megkönnyítésére használjuk a java.util.Scanner osztályt, és annak nextInt(), nextDouble() metódusait.